gpt4 book ai didi

c# - 从 ViewModel 强制刷新,没有任何变化

转载 作者:行者123 更新时间:2023-12-03 10:36:26 25 4
gpt4 key购买 nike

我正在使用 MVVM 模式在 WPF 中创建数据列表。数据本身通过转换器显示,该转换器采用 DateTime 并将其转换为标志:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
DateTime myDate = (DateTime)value;
return (myDate > DateTime.Now) ? "after" : "before";
}
myDate是模型对象中的一个属性,存储在 ObservableCollection 中在 View 模型中:
ObservableCollection<MyModel> MyModelList

这与 View 绑定(bind):
<DataTemplate>
<TextBlock Text="{Binding MyModel.MyDate, Converter={StaticResource MyDateConverter}}" />

当表单最初加载时,它会正确显示文本;例如,如果表单在 12:00 加载并且当前是 11:58,则显示“之前”。

我正在使用计时器每分钟刷新一次:
void Refresh()
{
System.Diagnostics.Debug.WriteLine("Refresh MyDate");
RaisePropertyChanged("MyModelList");

但这不起作用,因为它只刷新列表,而不是绑定(bind)日期。我能想到的强制更新的唯一方法是手动遍历集合并将每个日期更新为自身。

有没有更简单的方法呢?

最佳答案

通常,人们会在项目模型上提出更改通知。如果您的项目没有该功能,或者您不想使用更多数据/功能使项目困惑,请考虑将每个项目包装在“项目 View 模型”中。

或者,如果您的集合很小,并且计时器间隔足够长,您可以重置整个集合。刷新集合的默认值会稍微便宜一些 ICollectionView ,这就是你的ItemsControl最终绑定(bind)反对,尽管这样做可以说是代码异味:

CollectionViewSource.GetDefaultView(MyModelList).Refresh()

关于c# - 从 ViewModel 强制刷新,没有任何变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26511751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com