首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套MultiBinding(s)

嵌套MultiBinding(s)
EN

Stack Overflow用户
提问于 2012-04-23 12:23:02
回答 6查看 9.1K关注 0票数 24

我已经和WPF玩了很长一段时间了,但是今天我第一次需要在另一个WPF中嵌套一个MultiBinding,比如:

代码语言:javascript
复制
<MultiBinding>
   <Binding />       
   <MultiBinding>
      <Binding />
      <Binding />
   </MultiBinding>
</MultiBinding>

我得到一个异常,表示框架不允许这样做:

未处理'System.Collections.ObjectModel.Collection(System.Windows.Data.BindingBase)‘XamlParseException :向

类型的集合添加值引发了一个异常。

InnerException更明确:

BindingCollection不支持MultiBinding类型的项。只允许绑定。

因此,为了获得更多的信息,我在网上发现了this Microsoft Connect issue,这正是我的问题所在。

感谢您的反馈。WPF今天不支持这一点。这个特性已经被请求了很多年了(最近的一次是本月早些时候--参见https://connect.microsoft.com/WPF/feedback/details/650164/nested-multibinding)。我们将继续考虑这一点,作为将来的发行版。

现在我已经平静下来了,我不会容易的。我仍然需要这个,,我如何才能嵌套MultiBindings

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-04-23 12:29:46

只需使用一个多绑定一个MultiConverter。

或者我喜欢在viewmodel/datacontext的一个属性中公开您的条件。

票数 0
EN

Stack Overflow用户

发布于 2020-05-23 20:06:42

我知道这是一个老问题,但我认为这是一个更好的办法:

代码语言:javascript
复制
<FrameworkElement x:Name="IsBuyAndAmountInReference">
    <FrameworkElement.Tag>
        <MultiBinding Converter="{StaticResource LogicAndToBool}">
            <Binding Path="OrderData.IsBuy" />
            <Binding Path="OrderData.AmountInReference" />
        </MultiBinding>
    </FrameworkElement.Tag>
</FrameworkElement>
<FrameworkElement x:Name="IsSellAndAmountInBase">
    <FrameworkElement.Tag>
        <MultiBinding Converter="{StaticResource LogicAndToBool}">
            <Binding Path="OrderData.IsBuy" Converter="{StaticResource BooleanToBooleanInvert}" />
            <Binding Path="OrderData.AmountInReference" Converter="{StaticResource BooleanToBooleanInvert}" />
        </MultiBinding>
    </FrameworkElement.Tag>
</FrameworkElement>

<Slider Grid.Row="2" Grid.ColumnSpan="4">
    <Slider.Visibility>
        <MultiBinding Converter="{StaticResource LogicOrToVisibility}">
            <Binding ElementName="IsBuyAndAmountInReference" Path="Tag" />
            <Binding ElementName="IsSellAndAmountInBase" Path="Tag" />
        </MultiBinding>
    </Slider.Visibility>
</Slider>
票数 6
EN

Stack Overflow用户

发布于 2018-12-10 14:36:29

替代其他建议的方法是使用附加属性将嵌套的MultiBinding作为中间值保存。

例如,而不是:

代码语言:javascript
复制
<Element>
  <Element.Property>
    <MultiBinding>
      <Binding Path="A" />       
      <MultiBinding>
        <Binding Path="B" />
        <Binding Path="C" />
      </MultiBinding>
    </MultiBinding>
  </Element.Property>
</Element>

...do这个:

代码语言:javascript
复制
<Element Name="ElementName">
  <ElementProperties.AttachedProperty>
    <MultiBinding>
      <Binding Path="B" />
      <Binding Path="C" />
    </MultiBinding>
  </ElementProperties.AttachedProperty>
  <Element.Property>
    <MultiBinding>
      <Binding Path="A" />       
      <Binding ElementName="ElementName" Path="(ElementProperties.AttachedProperty)" />
    </MultiBinding>
  </Element.Property>
</Element>

我知道这个问题现在已经六年多了,但我碰到了,所以别人也会问。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10280463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档