2012-05-30 70 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 =>「我的方法」)。不過,我不喜歡這種語法,我發現它隱含。 –