我有一个场景,使用INotifyPropertyChanged
接口从ViewModel更新View是不合适的。
相反,我想显式地刷新一些绑定。
在WPF中,通过从控件获取BindingExpression
并调用BindingExpression.UpdateTarget()
(参见How to force a WPF binding to refresh?)似乎可以做到这一点。
在MAUI有可能发生类似的事情吗?BindingExpression
似乎并不存在...
背景
我正在显示一个项目列表,每个项目都有一个CreatedAt
时间戳。例如,在UI中,我想显示为“7分钟前”。因此,我创建了一个值转换器,将DateTime
转换为字符串。当然,显示的字符串应该随着时间的推移而更新。
恕我直言,在这种情况下,更新UI中的文本应该是视图的问题。我不想在我的ViewModels中有一个间隔计时器。我更喜欢在我的视图中有一个间隔计时器(在后面的代码中),它只刷新当前可见的那些项的绑定。
2条答案
按热度按时间col17t5w1#
“恕我直言,在这种情况下,更新UI中的文本应该是视图的问题。我不想在我的ViewModels中有一个间隔计时器。我更喜欢在我的视图中(在后面的代码中)有一个间隔计时器,它只刷新当前可见的那些项的绑定。
我想指出一些关于MVVM的重要内容。
当遵循MVVM体系结构时,ViewModel不应该知道关于视图的任何信息。但是,您的View始终可以访问ViewModel。
您可以随时从ViewModel调用方法。作为对事件的响应、接收到的消息或其他东西。
你的View应该已经包含了对ViewModel的引用,所以通过创建一个计时器,并调用一个方法来更新你的数据,你将不会违反任何MVVM原则。
(If我没有说服你,告诉我继续……)
j2qf4p5b2#
不幸的是,Maui缺乏任何访问绑定表达式的方法。
一种解决方案是创建视图属性来执行您想要的操作,并在计时器上触发属性更改:
In view的代码隐藏: