【发布时间】:2013-09-19 10:03:45
【问题描述】:
我的 WPF 应用程序中有三个 CheckBox,我想要的是根据 ViewModel 中的属性禁用/启用 CheckBox。
<Grid>
<CheckBox x:Name="cbTest1" Margin="12,341,476,5" IsEnabled="{Binding Path=BoolProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<CheckBox x:Name="cbTest3" Margin="74,341,414,5" IsEnabled="{Binding Path=BoolProperty, Mode=TwoWay }" />
<CheckBox x:Name="cbTest2" Margin="131,341,359,5" IsEnabled="{Binding Path=BoolProperty, Mode=TwoWay }" />
<Button x:Name="btnClick" Click="btnClick_Click" Margin="231,333,29,5" />
</Grid>
在我的测试应用程序中,我为按钮单击编写了代码
private void btnClick_Click(object sender, RoutedEventArgs e)
{
if (_boolProperty == true)
{
_boolProperty = false;
cbTest1.IsEnabled = false;
}
else
{
_boolProperty = true;
cbTest1.IsEnabled = true;
}
}
奇怪的行为是,如果我评论 cbTest1.IsEnabled = false; 或 cbTest1.IsEnabled = true; 然后 CheckBox es 保持禁用状态,
但只有一个 CheckBox 中的更改说,“cbTest1”的值 true 也会在其他复选框中进行更改。就像cbTest1.IsEnabled = true; 一样,所有三个 CheckBox 都已启用。如果 cbTest1.IsEnabled = false; 则所有三个 CheckBox 都被禁用。
请大家多多指教。为什么会这样?绑定是如何在这里发生的? 还有一个问题,如何将 checkBoxes isEnabled 属性与 viewModel 中的属性绑定?
【问题讨论】:
-
您将每个 CheckBox 的
IsEnabled属性双向绑定到名为BoolProperty的属性。因此,如果您禁用其中一个,该属性将设置为 false,随后另外两个也将被禁用。阅读 MSDN 上的 Data Binding Overview 文章中的绑定。