2010-07-13 113 views
1

问题 - 用户点击“做某事”按钮(视图),视图模型接收命令并将其传递给模型(函数调用)。一段时间过后,模型完成处理数据(异步)。模型如何通知viewmodel关于“需要更新”/“完成”? 什么是最好的方法?在这种情况下,我如何从ViewModel中分离模型?MVVM简单问题

回答

4

您可以在模型中实现一个普通的旧事件,该事件可以从ViewModel订阅。

更新

在回答您的评论。

如果您使用多个线程,那么您需要了解“Dispatcher”框架以确保来自非UI线程的调用已正确同步到UI线程中。这是WPF的一项要求。请参阅:

http://msdn.microsoft.com/en-us/magazine/cc163328.aspx

+0

我该怎么做? :)新学校在这里! – 2010-07-13 19:41:28

+0

@ 0xDEAD BEEF除了订阅自己没有写过的组件的事件外,知道如何实现自己的事件非常有用,例如http://msdn.microsoft.com/en-us/library/w369ty8x.aspx。对于初学者来说,事件可能是一个困难的概念 - 我事先对此表示歉意:) – 2010-07-13 19:45:39

+0

@@ 0xDEAD BEEF不确定这是否是实现事件的最佳示例,但是如果您有C#书籍,则应该涵盖此主题。 – 2010-07-13 19:48:31

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)); 
      } 
     } 
}