2012-05-30 2 views
0

Я пытаюсь использовать шаблон mvvm. При использовании galasoft EventToCommand я получаю то следующее сообщение об ошибке: The лучший перегруженный матч метод для «GalaSoft.MvvmLight.Command.RelayCommand.RelayCommand (System.Action)» имеет некоторые недопустимые аргументы ...MVVM-light и Windows Phone Toolkit - RelayCommand <DateTimeValueChangedEventArgs> сбой

код из моего XAML :

<toolkit:DatePicker Header="Select Date" 
    ValueStringFormat="{}{0:D}"          
    HorizontalAlignment="Left" Margin="0,126,0,0" 
    Name="datePicker1" 
    VerticalAlignment="Top" FontFamily="Verdana" 
    FontSize="22" Width="450"> 
    <i:Interaction.Triggers> 
      <i:EventTrigger EventName="ValueChanged"> 
       <cmd:EventToCommand PassEventArgsToCommand="True" 
        Command="{Binding DateSelection}"/> 
      </i:EventTrigger> 
    </i:Interaction.Triggers> 
</toolkit:DatePicker> 

В видовом:

public MainViewModel() 
    { 
     DateSelection = new RelayCommand<DateTimeValueChangedEventArgs>(time_Call); 
    } 

    public RelayCommand<DateTimeValueChangedEventArgs> DateSelection 
    { 
     get; 
     set; 
    } 
    void time_Call(object sender, DateTimeValueChangedEventArgs e) 
    { 

    } 

Я пуст!

ответ

0

Можете ли вы использовать двустороннюю привязку к свойству Value? Это упростит ситуацию и позволит вам использовать истинную силу привязки XAML и MVVM ....

<toolkit:DatePicker Header="Select Date" 
    ValueStringFormat="{}{0:D}"          
    HorizontalAlignment="Left" Margin="0,126,0,0" 
    Name="datePicker1" 
    VerticalAlignment="Top" FontFamily="Verdana" 
    FontSize="22" Width="450" 
Value={Binding SelectedDate, Mode=TwoWay}" /> 

Вид модели

private DateTime selectedDate; 
    public DateTime SelectedDate 
    { 
     get 
     { 
      return this.selectedDate; 
     } 

     set 
     { 
      if (this.selectedDate != value) 
      { 
      this.selectedDate = value; 
      this.RaisePropertyChanged("SelectedDate"); 
      } 
     } 
    } 

    public MainViewModel() 
    { 
// initialize to today being selected 
this.SelectedDate = DateTime.Now; 
// the property changed might not be necessary if you are just trying to get the new value 
    this.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(MainViewModel_PropertyChanged); 
    } 

    void MainViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) 
    { 
     if(e.PropertyName="SelectedDate") 
    { 
    // do something if needed 
    } 
    } 
+0

Я правильно мог установить его с DataBinding. Но при использовании инструментария я связан с представлением - так, используя «это». чтобы получить доступ к объектной форме View wont work. После некоторой отладки времени я узнал, что мне не хватает. Мне нужно вызвать метод time_Call и использовать делегат. Решение состояло в том, чтобы использовать Lambda для создания делегата: (e => «Мой метод»). Однако мне не нравится этот синтаксис, я нахожу его неявным. –