2011-04-22 71 views
3

从一个datepicker一个SelectedDateChanged事件绑定到命令我有一个空的代码隐藏文件,这WPF文件(我想保持代码隐藏空的,如果可能的话)如何我在VM

http://pastebin.com/x1CTZDFK

我再有这样的视图模型文件

using System; 
using System.Collections.ObjectModel; 
using System.Windows.Input; 
using MVVM_Test.Model; 
using MvvmFoundation.Wpf; 

namespace MVVM_Test.ViewModel 
{ 
    public class ViewModel : ObservableObject 
    { 
     private DateTime selectedDate; 
     public DateTime SelectedDate 
     { 
      get 
      { 
       return selectedDate; 
      } 
      set 
      { 
       selectedDate = value; 
       RaisePropertyChanged("SelectedDate"); 
      } 
     } 

     private DateTime startDate; 
     public DateTime StartDate 
     { 
      get { return startDate; } 
      set 
      { 
       startDate = value; 
       RaisePropertyChanged("StartDate"); 
      } 
     } 

     private DateTime endDate; 
     public DateTime EndDate 
     { 
      get { return endDate; } 
      set 
      { 
       endDate = value; 
       RaisePropertyChanged("EndDate"); 
      } 
     } 

     public ObservableCollection<Brick> SavedBricks { get; set; } 

     public ViewModel() 
     { 
      SelectedDate = DateTime.Now; 
      StartDate = new DateTime(2011, 1, 1); 
      EndDate = new DateTime(2011, 7, 31); 
      SavedBricks = new ObservableCollection<Brick>(); 
      //Brick b1 = new Brick(DateTime.Now, 50,50,50,300); 
      //SavedBricks.Add(b1); 
     } 

     public ICommand PrevHistory_cmd 
     { 
      get { return new RelayCommand(PrevHistoryExecute, PrevHistoryCanExecute); } 
     } 

     private void PrevHistoryExecute() 
     { 
      SelectedDate = SelectedDate - new TimeSpan(1, 0, 0, 0); 
     } 

     private bool PrevHistoryCanExecute() 
     { 
      if (StartDate < SelectedDate) 
       return true; 
      return false; 
     } 

     public ICommand NextHistory_cmd 
     { 
      get { return new RelayCommand(NextHistoryExecute, NextHistoryCanExecute); } 
     } 

     private void NextHistoryExecute() 
     { 
      SelectedDate = SelectedDate + new TimeSpan(1, 0, 0, 0); 
     } 

     private bool NextHistoryCanExecute() 
     { 
      if(EndDate > SelectedDate) 
       return true; 
      return false; 
     } 

     public ICommand StartStopSort_cmd 
     { 
      get { return new RelayCommand(NextHistoryExecute, NextHistoryCanExecute); } 
     } 

     private void StartStopSortExecute() 
     { 

     } 

     private bool StartStopSortCanExecute() 
     { 
      return true; 
     } 

     public ICommand DateSelectionChanged_cmd 
     { 
      get { return new RelayCommand(NextHistoryExecute, NextHistoryCanExecute); } 
     } 

     private void DateSelectionChangedExecute() 
     { 

     } 

     private bool DateSelectionChangedCanExecute() 
     { 
      return true; 
     } 
    } 
} 

那么我想SelectedDateChanged事件来执行我的公开的ICommand DateSelectionChanged_cmd,这样我可以在我的视图模型验证。我试图让System.Windows.Interactivity工作,但当我将它作为参考添加它不会编译,并说它无法找到该文件,所以现在我想知道是否有任何其他方式来做到这一点,我写的方式xml文件只是我如何猜测它会看起来的一个例子(哪种方法是错误的)

回答

7

您不能直接将事件绑定到命令。您可以使用附加的行为如图所示here,但实际上你并不需要:由于结合SelectedDate是双向的,你只需要在SelectedDate setter方法执行DateSelectionChangedExecute

public DateTime SelectedDate 
    { 
     get 
     { 
      return selectedDate; 
     } 
     set 
     { 
      selectedDate = value; 
      RaisePropertyChanged("SelectedDate"); 
      DateSelectionChangedExecute(); 
     } 
    }