C# Windows Phone MVVM+;Prism---将事件转换为命令

C# Windows Phone MVVM+;Prism---将事件转换为命令,c#,wpf,mvvm,windows-phone,C#,Wpf,Mvvm,Windows Phone,我在使用MVVM设计和Prism工具包将eventhandler转换为命令时遇到问题 我也在使用WPToolkit——日期选择器。我需要将ValueChanged事件设置为命令 这是我的密码: MainPageViewModel _setDateOne = new DelegateCommand(delegate() { }); void picker1_ValueChanged(object sender, DateTimeValueChangedEventArgs e) {

我在使用MVVM设计和Prism工具包将eventhandler转换为命令时遇到问题

我也在使用WPToolkit——日期选择器。我需要将ValueChanged事件设置为命令

这是我的密码:

MainPageViewModel

_setDateOne = new DelegateCommand(delegate()
     { });

void picker1_ValueChanged(object sender, DateTimeValueChangedEventArgs e)
{
   using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
{
   if (isf.FileExists("DateOne"))
       isf.DeleteFile("DateOne");
 IsolatedStorageSettings.ApplicationSettings["DateOne"] = e.NewDateTime.Value;
 IsolatedStorageSettings.ApplicationSettings.Save();
}
}
Xaml


我知道XAML是错误的;我还不知道该怎么做


很抱歉,我对编程特别是MVVM非常熟悉。

不需要
值更改
事件处理程序。在这里,您可以在
DateOne的setter中执行将所选日期保存的过程:

private DateTime _dateOne;
public DateTime DateOne
{
    get { return _dateOne; }
    set
    {
        _dateOne = value;
        SaveDate(value);
        NotifyPropertyChanged("DateOne");
    }
}

SaveDate(DateTime date)
{
    using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
    {
        if (isf.FileExists("DateOne"))
           isf.DeleteFile("DateOne");
        IsolatedStorageSettings.ApplicationSettings["DateOne"] = date;
        IsolatedStorageSettings.ApplicationSettings.Save();
    }
}
假设页面的
DataContext
设置正确,这样绑定就足够了:

<toolkit:DatePicker Name="picker1" Value="{Binding DateOne, Mode=TwoWay}"/>


如果您正在执行MVVM,请不要使用ValueChanged事件,而是在ViewModel和绑定到DatePickers值的属性设置器中实现INotifyPropertyChanged,调用您为valuechange命令计划的任何内容。我确实实现了NotifyPropertyChanged事件。ValueChanged中的代码正是我希望在值更改时发生的事情;不知道如何用命令实际实现它。此外,我还需要DateTimeValueChangedEventArgs e,以便知道将DateTime设置为什么。在DateOne的setter中,
set{DateOne=value;CallYourMethodHere(value);}
由于我的绑定是双向的,所以我实际上不需要事件arg,那么?正确。您在DateOne属性中具有所需的值。
<toolkit:DatePicker Name="picker1" Value="{Binding DateOne, Mode=TwoWay}"/>