2010-08-30 13 views
1

我正在研究一个正在通过网络进行通信的应用程序来监视另一个应用程序的变量。WPF:如何仅在绑定处于活动状态时刷新模型数据值?

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

我尽量保持我的应用程序的架构尽可能干净,有一个模型,不知道该视图,使用绑定等

我想到只有当刷新我的模型数据值绑定是活动的(这意味着显示一些变量的用户控件被显示),你认为这是一个很好的解决方案吗? 否则,我也可以使用每个用户控件的属性“IsVisible”......但我认为在我的应用程序的模型一侧工作会更好。

你知道是否有办法知道绑定是否活动?

如果我的问题不够清楚,我可以画一个小模式。就告诉我嘛。

回答

2

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

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

要回答你的问题,是的,只有在绝对需要时才更新网络喋喋不休。由于您使用的是WPF和INotifyPropertyChanged,因此只有当您调用绑定变量的更新并触发事件时才会发生这种情况。

+0

嗨乔丹, 谢谢你的回答,但恐怕我还没有很好地理解它。 事情是,我有一个通过计时器进行计时的通信任务,比方说每100ms或每10ms,以及哪个只应更新实际显示的变量。这就是为什么我正在寻找一种方法来从模型端知道显示哪个变量......然后我想要检测哪个绑定是活动的(因为我知道绑定仅在显示相关UI元素时才有效)。 – 2010-08-31 09:56:50

+0

我明白你的意思了。您是分享同一个模型的视图,还是他们分解为每个视图的一个视图模型? – 2010-08-31 13:49:10

+0

现在我的观点正在分享相同的模型。但是,如果我真的需要,我可以改变架构,因为我试图让它可重用,所以它应该是最好的;-) – 2010-09-01 06:09:08

0

如果一个绑定是“活动的”(我假设你的意思是说对属性感兴趣的依赖项属性),他们会调用notifypropertychanged属性的getter属性。因此,只要你不是多余地触发NotifyPropertyChanged,每次调用你的属性的时候,你都可以安全地做任何数据刷新适用于该属性。

0

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

查看我的blog post了解更多详情。

相关问题