【问题标题】:Windows Phone MVVM + Prism --- Convert Event to a commandWindows Phone MVVM + Prism --- 将事件转换为命令
【发布时间】:2014-03-06 03:34:43
【问题描述】:

我在使用 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。

【问题讨论】:

  • 如果您正在执行 MVVM,请不要使用 ValueChanged 事件,而是在您的 ViewModel 和绑定到 DatePickers 的属性的设置器中实现 INotifyPropertyChanged 调用您计划的任何内容valuechange 命令。
  • 我确实实现了 NotifyPropertyChanged 事件。 ValueChanged 中的代码正是我想要在值更改时发生的事情;不知道如何用命令实际实现它。而且,我需要 DateTimeValueChangedEventArgs e 才能知道将我的 DateTime 设置为什么。
  • 在 DateOne 的设置器中,set { DateOne = value; CallYourMethodHere(value); }
  • 既然我的绑定是TwoWay,那么我实际上不需要事件arg,那么呢?
  • 正确。您在 DateOne 属性中拥有所需的值。

标签: c# wpf mvvm windows-phone


【解决方案1】:

这里不需要ValueChanged 事件处理程序,您可以在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}"/>

【讨论】:

    猜你喜欢
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    相关资源
    最近更新 更多