Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用虚拟化更新ItemsSource中所有特定TextBlock的TextBlock.TextProperty的目标?_C#_Wpf_Xaml - Fatal编程技术网

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监听器(例如,用于过滤)。