问题 - 用户点击“执行某事”按钮(视图),查看模型接收命令并将其传递给模型(函数调用)。一些时间过去和模型完成处理数据(异步)。模型如何通知viewmodel“需要更新”/“完成”? 什么是最好的方法?在这种情况下,如何从ViewModel中分离Model?
答案 0 :(得分:4)
您可以在模型中实现一个可以从ViewModel订阅的普通旧事件。
<强>更新强>
回应你的评论。
如果您使用多个线程,那么您需要了解“Dispatcher”框架,以确保来自非UI线程的调用正确地同步到UI线程。这是WPF的要求。请参阅:
答案 1 :(得分:1)
我认为这样做的正常方法是使用INotifyPropertyChanged接口。我不是100%肯定它是如何工作的,因为我仍然是WPF的新手,但通常你会在属性发生变化时触发事件,传入属性的名称并更新该属性的绑定。
下面是一些示例代码。然后,您将绑定到IsSelected属性(因为我认为这应该是您的ViewModel)。
public class TestProperty : INotifyPropertyChanged
{
public Boolean IsSelected
{
get { return isSelected; }
set
{
isSelected = value;
this.NotifyPropertyChanged("IsSelected");
}
}
private bool isSelected;
/// <summary>
/// Occurs when a property value changes.
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Notifies the property changed.
/// </summary>
/// <param name="propertyName">Name of the property.</param>
private void NotifyPropertyChanged(String propertyName)
{
this.VerifyPropertyName(propertyName);
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
答案 2 :(得分:0)
您可能会发现WPF Application Framework (WAF)的示例应用程序很有帮助。它们显示了模型如何通过事件与ViewModel或View进行通信。