在特定属性更改时评估Multibinding

时间:2013-01-30 16:48:43

标签: c# .net wpf multibinding

我有一个看起来像这样的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中实现这一目标?

非常感谢任何帮助 - 谢谢!

1 个答案:

答案 0 :(得分:0)

尝试将托管控件的DataContext设置为Object2。然后,您可以直接绑定到MyObject。这有帮助吗?当然,这仍然意味着对MyCollectionMyBoolean的更改也会触发MultiBinding重新评估。

如果你提供了使用MultiBinding的上下文(也就是TextBlock的返回文字?

,这也会有所帮助

编辑:

回应你的评论,也许有不同的方式。我假设您的3个多重绑定属性具有单独的PropertyChanged事件。如果您的应用程序允许,也许您可​​以将这些事件从MyCollectionMyBoolean属性移出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