C# 如何使用虚拟化更新ItemsSource中所有特定TextBlock的TextBlock.TextProperty的目标?
假设这里有一段数据:C# 如何使用虚拟化更新ItemsSource中所有特定TextBlock的TextBlock.TextProperty的目标?,c#,wpf,xaml,C#,Wpf,Xaml,假设这里有一段数据: public string DisplayTimeLeft { get { return (SessionEnd - DateTime.Now).ToString(); } } 我想我不能调用类似OnPropertyChanged(nameof(DisplayTimeLeft))每秒钟一次,因为像这样的项目很多,所以这将是一个非常奇怪的解决方案 对于单个文本块(在某些SelectedTime上),我每秒调用类似这样的内容: TimeLeftTextBlock.Ge
public string DisplayTimeLeft {
get { return (SessionEnd - DateTime.Now).ToString(); }
}
我想我不能调用类似OnPropertyChanged(nameof(DisplayTimeLeft))代码>每秒钟一次,因为像这样的项目很多,所以这将是一个非常奇怪的解决方案
对于单个文本块(在某些SelectedTime上),我每秒调用类似这样的内容:
TimeLeftTextBlock.GetBindingExpression(TextBlock.TextProperty)?.UpdateTarget();
但如果我想在ItemsSource(或ListBox)中显示剩余的实际时间,该怎么办?最好的方法是什么?复制@VadimMartynov“设置了一个只调用PropertyChanged的计时器”-即使是1000件物品?即使它们中的大多数目前不可见(但已经有一些属性更改的侦听器)?是不是太多了?嗯,我希望你能找到其他的解决办法,但在我看来,没有更好的办法了GetBindingExpression
和类似的解决方案会运行得更慢。听起来您甚至还不知道是否存在此问题。首先,尝试一个显而易见的、简单的、易于实现的解决方案。然后,如果你有问题,看看如何解决。如果您有一千个项目,其中只有少数项目可见,并且在实践中存在明显的滞后问题,那么您可以考虑为每个本地viewmodels提供一个自己的DisplayTimeLeft,它返回主VM的DisplayTimeLeft的值。每个子VM侦听主VM的DisplayTimeLeft更改。但他们只会在自己的财产(名称(DisplayTimeLeft))碰巧可见时才开火。@EdPlunkett谢谢,我会试试的。但我在想,如果还有其他方法(我想我找到了),毕竟元素的数量可能是一万个或更多;而且他们已经有了一些PropertyChanged监听器(例如,用于过滤)。