如何通过readonly属性通知UI更改?

4th*_*ace 6 .net c# wpf c#-3.0

在WPF中,我有一个只有get {}的属性.该值来自方法的返回.NotifyPropertyChanged通常在属性集{}中使用.然后它可以通知UI并显示更新的值.但是仅使用get {},由于必须执行要检查的方法,因此无法检测是否有新值或不同值.

有没有办法更新UI而不必保留包含方法中最后一个值的本地值,在这种情况下需要进行比较?

Ree*_*sey 11

但是仅使用get {},由于必须执行要检查的方法,因此无法检测是否有新值或不同值.

问题归结为:什么改变了财产?更改属性的方法应该使用属性NotifyPropertyChanged的名称调用您的属性,这将导致WPF重新获取值并更新用户界面.

WPF不关心那里PropertyChanged事件被提出-它只是监听它,并根据需要刷新绑定.


编辑以回应评论:

听起来这可能是对您的Model类执行某些操作的结果.在这种情况下,通常您知道一个或多个属性可能会更改,但不一定是哪些属性.如果您的模型实现了INotifyPropertyChanged,您可以订阅它并通过您的NotifyPropertyChanged方法将通知"冒泡"到UI .但是,如果没有,还有另一种选择.

如果你知道一个或多个属性可能会改变,你可以提出一个PropertyChanged事件以string.Empty作为PropertyName在EventArgs的.这将导致WPF刷新所有绑定属性.这可能只是在你的代码中加入这样的东西:

this.Model.DoSomething(); // This will change 1+ properties
this.NotifyPropertyChanged(string.Empty); // Refresh our entire UI
Run Code Online (Sandbox Code Playgroud)

但是,我不建议在任何地方都这样做,因为它会增加开销 - 但如果您在执行操作时不知道哪些属性会发生变化,那么它通常是最干净的解决方案.

  • +1,不知道你可以用一个空字符串来提升`PropertyChanged`来刷新所有订阅者 (3认同)