MVVM简单的问题

时间:2010-07-13 19:32:35

标签: mvvm

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

3 个答案:

答案 0 :(得分:4)

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

<强>更新

回应你的评论。

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

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

答案 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进行通信。