我有一个看起来像这样的MultiBinding:
<MultiBinding Converter="{StaticResource MyConverter}">
<Binding Path="Object1.Object2.MyObject" />
<Binding Path="Object1.Object2.MyCollection[1]" />
<Binding Path="MyBoolean" />
</MultiBinding>
我只想在MyObject更改时评估此MultiBinding(从而调用MyConverter.Convert())。我知道我可以将MultiBinding的UpdateSourceTrigger设置为Explicit,但考虑到Object1和Object2经常被重新分配,我必须在后面的代码中连接很多PropertyChanged事件。是否有可能在XAML中实现这一目标?
非常感谢任何帮助 - 谢谢!
答案 0 :(得分:0)
尝试将托管控件的DataContext
设置为Object2
。然后,您可以直接绑定到MyObject
。这有帮助吗?当然,这仍然意味着对MyCollection
和MyBoolean
的更改也会触发MultiBinding
重新评估。
如果你提供了使用MultiBinding
的上下文(也就是TextBlock
的返回文字?
编辑:
回应你的评论,也许有不同的方式。我假设您的3个多重绑定属性具有单独的PropertyChanged事件。如果您的应用程序允许,也许您可以将这些事件从MyCollection
和MyBoolean
属性移出MyObject
属性。例如:
public object MyObject
{
get { ... }
set
{
...
OnPropertyChanged("MyObject");
OnPropertyChanged("MyCollection");
OnPropertyChanged("MyBoolean");
}
}
现在我知道这有点像黑客攻击,但这只会在更改MultiBinding
时触发MyObject
。
编辑#2:
另一种选择是向主机控件添加EventTrigger
,例如:
<EventTrigger RoutedEvent="MyObject.TargetUpdated">
<Setter TargetName="yourCheckBox" Property="Value">
<Setter.Binding>
<MultiBinding Converter="{StaticResource MyConverter}">
<Binding Path="MyObject" />
<Binding Path="MyCollection" />
<Binding Path="MyBoolean" />
</MultiBinding>
</Setter.Binding>
</Setter>
</EventTrigger>
这里唯一要注意的是确保你的复选框绑定Mode=TwoWay
。
我提到了link。