问题 - 用户点击“做某事”按钮(视图),视图模型接收命令并将其传递给模型(函数调用)。一段时间过后,模型完成处理数据(异步)。模型如何通知viewmodel关于“需要更新”/“完成”? 什么是最好的方法?在这种情况下,我如何从ViewModel中分离模型?MVVM简单问题
Q
MVVM简单问题
1
A
回答
4
您可以在模型中实现一个普通的旧事件,该事件可以从ViewModel订阅。
更新
在回答您的评论。
如果您使用多个线程,那么您需要了解“Dispatcher”框架以确保来自非UI线程的调用已正确同步到UI线程中。这是WPF的一项要求。请参阅:
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));
}
}
}
0
您可能会发现WPF Application Framework (WAF)有用的示例应用程序。它们显示模型如何通过事件与ViewModel或View进行通信。
相关问题
- 1. 简单的WPF MVVM绑定问题
- 2. 非常非常简单的MVVM问题
- 3. 简单C问题
- 4. 简单$ _GET问题
- 5. 简单Jeditable问题
- 6. Xpath简单问题
- 7. 简单的问题
- 8. 简单的问题
- 9. (简单)问题TweetSharp
- 10. 简单CARRAY问题
- 11. AVMutableAudioMix简单问题
- 12. 简单TableView问题
- 13. INotifyPropertyChanged简单问题
- 14. Drupal简单问题
- 15. 简单RDOC问题
- 16. Prolog简单问题
- 17. Ajax简单问题
- 18. 简单fizzbuzz问题
- 19. CSS问题简单
- 20. Silverlight MVVM问题
- 21. MVVM WPF问题
- 22. Silverlight MVVM问题
- 23. 针对Pivot的简单MVVM
- 24. 简单的WPF + MVVM绑定
- 25. MVVM设计问题
- 26. MVVM Light Messeging问题
- 27. MVVM Light Messaging问题
- 28. MVVM Light Silverlight问题
- 29. 简单的SQL问题(mysql)
- 30. (简单)提升thread_group问题
我该怎么做? :)新学校在这里! – 2010-07-13 19:41:28
@ 0xDEAD BEEF除了订阅自己没有写过的组件的事件外,知道如何实现自己的事件非常有用,例如http://msdn.microsoft.com/en-us/library/w369ty8x.aspx。对于初学者来说,事件可能是一个困难的概念 - 我事先对此表示歉意:) – 2010-07-13 19:45:39
@@ 0xDEAD BEEF不确定这是否是实现事件的最佳示例,但是如果您有C#书籍,则应该涵盖此主题。 – 2010-07-13 19:48:31