我已经和WPF玩了很长一段时间了,但是今天我第一次需要在另一个WPF中嵌套一个MultiBinding,比如:
<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
发布于 2012-04-23 12:29:46
只需使用一个多绑定一个MultiConverter。
或者我喜欢在viewmodel/datacontext的一个属性中公开您的条件。
发布于 2020-05-23 20:06:42
我知道这是一个老问题,但我认为这是一个更好的办法:
<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>发布于 2018-12-10 14:36:29
替代其他建议的方法是使用附加属性将嵌套的MultiBinding作为中间值保存。
例如,而不是:
<Element>
<Element.Property>
<MultiBinding>
<Binding Path="A" />
<MultiBinding>
<Binding Path="B" />
<Binding Path="C" />
</MultiBinding>
</MultiBinding>
</Element.Property>
</Element>...do这个:
<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>我知道这个问题现在已经六年多了,但我碰到了,所以别人也会问。
https://stackoverflow.com/questions/10280463
复制相似问题