You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在多绑定中某一子绑定变更时重新评估所有子绑定?

问题描述
var binding1 = new Binding($"Item[0].IsChecked")
{
     Source = sender,
     UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
     ConverterParameter = dependant
};

var binding2 = new Binding($"Item")
{
     Source = sender,
     Converter = new AllItemsAreEqualConverter(),
     ConverterParameter = dependant
};
var multiBinding = new MultiBinding
{
     Bindings = { binding1, binding2 }, Converter = unifyingConverter
};

我的模型实现了INotifyPropertyChanged接口,修改IsChecked属性时,binding1会按预期重新评估,但此时binding2的结果也应该发生变化。我希望多绑定能在某一子绑定变更时重新评估所有子绑定,是否可行?

补充背景:
我在Telerik属性网格中同时编辑多个对象,思路是让第一个绑定在IsChecked属性的PropertyChanged通知触发时重新评估绑定状态,第二个绑定检查所有选中模型的同一属性,最终通过multibinding中的unifyingConverter将两个子绑定的值转换为Visibility,用于控制特定属性定义的可见性。

解决方案

可行,推荐两种实现方式:

  • 手动触发集合通知
    binding2绑定的是Item集合,单个元素的IsChecked变更不会触发集合本身的PropertyChanged通知。你可以在模型的IsChecked属性setter中,让ViewModel触发Item集合的PropertyChanged事件(比如调用OnPropertyChanged(nameof(Item)))。这样当binding1因IsChecked更新时,binding2会因为集合的通知重新评估。

  • 自定义MultiBinding强制刷新
    继承MultiBinding类,重写相关方法,当任意子绑定值变化时,强制触发所有子绑定的重新评估。不过这种方式代码量更大,优先级低于第一种方案。

额外注意:如果Item是ObservableCollection,要确保集合内每个元素都正确实现INotifyPropertyChanged,且IsChecked变更时触发通知;同时AllItemsAreEqualConverter要能正确处理集合元素的属性变化,返回准确结果。

内容的提问来源于stack exchange,提问作者atsjoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:35:16