[英]wpf fire PropertyChanged event in binding source that binding gets updated
[英]Is it possible to tell the WPF binding to respond asynchronously to a PropertyChanged event (low priority)?
我有一长串要过滤的项目。 我已经向列表中的视图模型添加了一个IsFiltered属性。 使用ItemContainerStyle,我可以将ListViewItem的可见性绑定到IsFiltered属性。
<ListView ItemsSource="{Binding Path=MyItems}">
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsFiltered}" Value="True">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
</ListView>
一切正常,更改IsFiltered属性可正确反映在UI上。 我正在运行一个后台进程,以确定要筛选的项目以及何时完成筛选的每个视图模型项目的IsFiltered属性在UI线程上进行更新。 问题在于,由于触发了大量PropertyChanged事件,因此出现了非常明显的暂停。 我设法通过使用
public bool IsFiltered
{
get
{
return m_IsFiltered;
}
set
{
if (m_IsFiltered == value)
{
return;
}
m_IsFiltered = value;
Dispatcher.CurrentDispatcher.BeginInvoke(
DispatcherPriority.Background,
(System.Action)(() => RaisePropertyChanged("IsFiltered")));
}
}
在视图模型中。 RaisePropertyChanged仅引发PropertyChanged事件。
我试图从视图模型限制对UI框架(WPF)的了解。 在这种情况下,我只想进行RaisePropertyChanged调用,并以某种方式赋予UI以异步方式监听属性更改的责任。 这可能吗? 在更改属性后触发事件来处理事件并不是很关键。
我尝试将IsAsync = True添加到DataTrigger的绑定中,但这没有达到预期的效果。
IsAsync
很好,但是您应该正确地确定哪个属性更改(由分配新数据引起)需要长时间运行的任务,然后将其放置在那里。 数据触发器绑定上的CMIIW IsAsync
不起作用,因为要对IsFiltered
执行更改只是一个简单的任务,不需要长时间运行的任务。
因此,找出哪个属性更改可能花费了长时间运行的任务,然后将 IsAsync = True
放在了 那里。
希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.