3

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

任何帮助将不胜感激 - 谢谢!

4

1 回答 1

0

尝试将DataContext您的主机控制设置为Object2. 然后就可以MyObject直接绑定了。这有帮助吗?当然,这仍然意味着改变,MyCollection也会MyBoolean触发MultiBinding重新评估。

如果您提供了使用您的上下文的上下文,这也会有所帮助MultiBinding(即,这是返回的文本TextBlock吗?

编辑:

回应您的评论,也许有不同的方式。我假设您的 3 个多重绑定属性具有单独的 PropertyChanged 事件。如果您的应用程序允许,也许您可​​以将这些事件从MyCollectionandMyBoolean属性中移出并移到MyObject属性中。例如:

public object MyObject
{
    get { ... }
    set
    {
        ...
        OnPropertyChanged("MyObject");
        OnPropertyChanged("MyCollection");
        OnPropertyChanged("MyBoolean");
    }
}

现在我知道这有点骇人听闻,但这会触发MultiBinding.MyObject

编辑#2:

另一种选择是将 a 添加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您的复选框绑定。

我提到了这个链接

于 2013-01-30T17:49:44.653 回答