我最近不得不使用WPF / XAML跳转到一个新项目 . 虽然我在C#和ASP.Net MVC方面有丰富的经验,但这种转变对我来说并不像我希望的那样顺利 .
问题:
我需要将一个按钮绑定到一个复选框 . 即我需要将Button的IsEnabled属性绑定到CheckBox的IsChecked属性 . 我似乎无法让它以直接的方式工作,奇怪的是,如果我使用Snoop禁用按钮,它似乎开始按照我的意愿工作,但前提是我这样做 .
要清楚,复选框和按钮都可以按预期独立工作 . 只是在单击复选框时禁用Button的绑定无效 .
这大致是我目前的XAML:
<Button Grid.Column="1" Grid.Row="1" Content="get curve"
IsEnabled="{Binding ElementName=IsStraightCheckBox, Path=IsChecked, Mode=TwoWay}"
Command="{Binding CustomCommand}"
Style="{DynamicResource ButtonFormStyle}" />
<CheckBox Name="IsStraightCheckBox" IsChecked="{Binding DataObject.Alignment, Converter={StaticResource CustomConverter}, Mode=TwoWay}"/>
CheckBox上的绑定/转换器正在按照我想要的方式工作,但我不知道它是否干扰了我想要完成的另一端 .
我不确定我是否在结构上做错了,或者我只是误解了绑定是如何工作的 .
编辑:下面提供的答案通常是我想要完成的正确方法 . 我的代码库有无关的问题导致绑定失败,因此我的困惑 .
1 回答
这是一些简单的代码:
有一个按钮,其状态由复选框控制
复选框本身由带有简单转换器的切换按钮驱动
XAML:
Converter:
Few notes
并不总是信任VS XAML Designer,在这种情况下,按钮在启用XAML复选框时不会做出反应;然而,在Blend中,你可以看到它在变化
检查输出窗口中的潜在绑定错误,请注意,某些绑定在(大)应用程序启动时会出错是正常的,因为这些很早就会被评估,当您使用该应用程序时,它们会对它们的值感兴趣