2012-05-30 30 views
0

我试图展开mvvm模式。当使用galasoft EventToCommand我得到那么以下错误: 的最好重载方法匹配“GalaSoft.MvvmLight.Command.RelayCommand.RelayCommand(System.Action)”有一些无效的参数...MVVM-light和Windows Phone工具包 - 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

我可以正确设置了绑定。但是,当使用工具包时,我从视图中耦合出来 - 所以使用“this”。获得访问形式的视图不会工作。经过一段时间的调试后,我发现我错过了什么。我需要调用time_Call方法并使用委托。解决方案是使用Lambda生成委托:(e =>“我的方法”)。不过,我不喜欢这种语法,我发现它隐含。 –