我有一个带有多个按钮的界面。我想根据“复杂”情况启用或禁用这些按钮。为了避免代码重复,我将此MultiBinding声明为应用程序资源:
<MultiBinding x:Key="MyMultiBinding" Converter="{StaticResource ResourceKey=MyConverter}">
<Binding Path="IsConnected" />
<Binding Path="IsOpened" />
</MultiBinding>
这是我声明按钮的方式:
<Button Name="MyButton" Content="Click me!" IsEnabled="{StaticResource ResourceKey=MyMultiBinding}" />
在运行时,出现以下错误:“设置属性IsEnabled引发异常... MultiBinding对属性IsEnabled来说不是有效值”。
我不知道为什么这不起作用。您能给我指出正确的方法吗?谢谢你。
您不能将booleanIsEnabled
属性设置为type的值MultiBinding
。那就是正在发生的事情。
正如@Viv所指出的,您可以声明aStyle
做繁重的工作:
<Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
<Setter Property="IsEnabled">
<Setter.Value>
<MultiBinding Converter="{StaticResource ResourceKey=MyConverter}">
<Binding Path="IsConnected" />
<Binding Path="IsOpened" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
<Button Name="MyButton" Content="Click me!" Style="{StaticResource ButtonStyle}" />
如果Button
DataContext
具有这些属性,则效果很好。如果它们各自具有不同DataContext
的绑定功能,那么它会特别好用,从而使它们具有不同的原因。
如果它们都绑定到相同的对象DataContext
,或者属性在不同的对象上,则可以使用Freezable技巧来提供一个将按钮绑定到的值:
<BindingProxy x:Key="isEnabled">
<BindingProxy.Data>
<MultiBinding Converter="{StaticResource ResourceKey=MyConverter}">
<Binding Path="IsConnected" />
<Binding Path="IsOpened" />
</MultiBinding>
</BindingProxy.Data>
</BindingProxy>
<Button Name="MyButton" Content="Click me!" IsEnabled="{Binding Data, Source={StaticResource isEnabled}}" />
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句