所以我有一个切换按钮如下:
<ToggleButton
IsChecked="{Binding IsButtonChecked, Mode=OneWay}"
Command="{Binding DoNothing}"
CommandParameter="{Binding ServerViewModel}"
Content="Click Me!"></ToggleButton>
IsButtonChecked = false
的初始值当我单击切换按钮时,ICommand正确触发(绑定到RelayCommand),此命令对CanExecute返回false。 WPF ToggleButton的状态现在是Checked = true,但是支持的模型仍然是 IsButtonChecked = false 。为什么UI更新为已检查状态,即使绑定属性没有?
我能够阻止UI更新的唯一方法是创建反向属性 IsButtonNotChecked 。然后我将该属性绑定到XAML中的 IsEnabled 。这可以防止在当前启用状态时发生按钮单击。
答案 0 :(得分:0)
您将绑定模式设置为OneWay
,将其设置为TwoWay
。
<ToggleButton Command="{Binding DoNothing}"
CommandParameter="{Binding ServerViewModel}"
Content="Click Me!"
IsChecked="{Binding IsButtonChecked,
Mode=TwoWay}" />
答案 1 :(得分:0)
为了它的价值,这就是我所做的......它看起来非常笨拙。
我将绑定模式设置为TwoWay。它看起来不像OneWay绑定尊重IsChecked属性。
<ToggleButton
IsChecked="{Binding IsButtonChecked, Mode=TwoWay}"
Command="{Binding DoNothing}"
CommandParameter="{Binding ServerViewModel}"
Content="Click Me!"></ToggleButton>
其次,我没有反对IsButtonChecked的mutator属性。
public bool IsButtonChecked
{
get
{
return _isButtonChecked;
}
set
{
// Prevents the IsButtonCheckedfrom incorrectly being set to a
// enabled state, yet the model is false
// IsButtonCheckeddoesn't seem to respect OneWay binding.
}
}
然后在代码后面,我更新_isButtonChecked属性并调用INotifyPropertyChanged事件。
internal void ShouldBeChecked(bool isChecked)
{
_isButtonChecked = isChecked;
OnPropertyChanged("IsButtonChecked");
}
虽然真的很笨重......奇怪的是ToggleButton并不尊重绑定属性......