WPF:如何仅在绑定处于活动状态时刷新模型数据值?

时间:2010-08-30 13:54:15

标签: wpf binding

我正在开发一个通过网络进行通信以监控其他应用程序变量的应用程序。

远程应用程序有大量变量,我只想传输我当前在用户界面上看到的变量,以避免网络过载。

我尽量保持应用程序的体系结构尽可能干净,使用不知道视图的模型,使用绑定等。

我只考虑在绑定处于活动状态时刷新我的模型数据值(这意味着显示了显示某些变量的用户控件),您认为这是一个很好的解决方案吗? 否则,我也可以使用每个用户控件的属性“IsVisible”......但我认为最好在我认为应用程序的模型方面工作。

您知道是否有办法知道绑定是否有效?

如果我的问题不够明确,我可以绘制一个小模式。告诉我。

3 个答案:

答案 0 :(得分:2)

请记住,仅当通过INotifyPropertyChanged发布更改时才会刷新绑定(或者在双向绑定的情况下,UI会修改双向绑定变量)。大多数情况下,您将明确查询服务。当服务响应返回时,您将修改ViewModel中的属性并调用PropertyChanged事件以告知绑定自行更新。

基本上,除非你告诉它,否则你的绑定不会更新。 ObservableCollections将自动更新绑定,因为它们在内部实现了INotifyPropertyChanged。但是,只有在更新集合时才会发生这种情况。

要回答您的问题,是的,只需在您绝对需要时进行更新,从而保持网络聊天功能。由于您使用的是WPF和INotifyPropertyChanged,因此只有在调用绑定变量的更新时才会发生这种情况+触发事件。

答案 1 :(得分:0)

如果绑定是“活动的”(我假设您的意思是存在对该属性感兴趣的依赖属性),则它们将在特定属性的notifypropertychanged上调用该属性的getter。

因此,只要您没有多次触发NotifyPropertyChanged,每次调用您的属性获取时,您都可以安全地执行该属性的刷新数据。

答案 2 :(得分:0)

这个问题和答案激发了我创建名为VisibleBinding的标记扩展 使用它时 - 仅当控件可见时才会应用绑定(因此将在源上侦听INotifyPropertyChanged)。

查看我的blog post了解详情。