C# WPF中的多线程a样式数据触发器IValueConverter
我通过设置样式DataTrigger并将其绑定到IValueConverter(CheckForShade)来有条件地格式化listview,该转换器返回是否应应用样式C# WPF中的多线程a样式数据触发器IValueConverter,c#,wpf,multithreading,datatrigger,ivalueconverter,C#,Wpf,Multithreading,Datatrigger,Ivalueconverter,我通过设置样式DataTrigger并将其绑定到IValueConverter(CheckForShade)来有条件地格式化listview,该转换器返回是否应应用样式 <Style.Triggers> <DataTrigger Binding="{Binding Converter={StaticResource CheckForShade}}" Value="false" > <Setter
<Style.Triggers>
<DataTrigger Binding="{Binding Converter={StaticResource CheckForShade}}" Value="false" >
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
问题在于,IValueConverter中包含的逻辑非常密集,我想以某种方式对其进行多线程处理,以便可以同时对Listview中的每一行的格式进行评估,并在UI线程以外的线程中进行评估
另外,它当前会减慢应用程序的打开速度,同时会检查Listview的所有行并应用格式设置。我想延迟格式设置检查,直到UI加载完毕,然后对每行执行多线程操作。您可以尝试使用绑定,将
IsAsync
设置为true
,然后将回退值指定为false:请参阅
或者,使用具有最高优先级的CheckForShade转换器的PriorityBinding
和返回具有较低优先级的false
的默认绑定:
PriorityBinding
的好处是,它会不断侦听列表中较高级别绑定的属性更改。通过这种方式,您可以实现如下转换器:
- 创建一个工作线程来计算布尔值,并将它们放入静态字典中
- 实现转换器以查看结果是否就绪(例如,使用字典上的
)TryGetValue
- 如果结果已准备好,请返回它。否则,返回
dependencProperty.UnsetValue
IsAsync
设置为true
的绑定,然后将回退值指定为false:请参阅
或者,使用具有最高优先级的CheckForShade转换器的PriorityBinding
和返回具有较低优先级的false
的默认绑定:
PriorityBinding
的好处是,它会不断侦听列表中较高级别绑定的属性更改。通过这种方式,您可以实现如下转换器:
- 创建一个工作线程来计算布尔值,并将它们放入静态字典中
- 实现转换器以查看结果是否就绪(例如,使用字典上的
)TryGetValue
- 如果结果已准备好,请返回它。否则,返回
dependencProperty.UnsetValue