繁体   English   中英

Windows Phone MVVM + Prism —将事件转换为命令

[英]Windows Phone MVVM + Prism — Convert Event to a command

我在使用MVVM设计和Prism工具包将事件处理程序转换为命令时遇到麻烦。

我也在使用WPToolkit-DatePicker。 我需要将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

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

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

抱歉,我是编程新手,尤其是MVVM。

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

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}"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM