所以我有一个切换按钮如下:
<ToggleButton
IsChecked="{Binding IsButtonChecked, Mode=OneWay}"
Command="{Binding DoNothing}"
CommandParameter="{Binding ServerViewModel}"
Content="Click Me!"></ToggleButton>
IsButtonChecked的初始值=假
当我按一下切换按钮时,ICommand会正确地引发(系结至RelayCommand),而且此命令会针对CanExecute传回false。WPF ToggleButton的状态现在是Checked=true,但支援的模型仍是IsButtonChecked = false。为何UI会更新为核取状态,而系结属性却没有?
便笺
我能够防止UI更新的唯一方法是创建一个反向属性IsButtonNotChecked。然后我将该属性绑定到XAML中的IsEnabled。这可以防止在当前状态为启用时发生按钮单击。
3条答案
按热度按时间z9zf31ra1#
您已将绑定模式设置为
OneWay
,请将其设置为TwoWay
。olqngx592#
为了它的价值,这是我所做的...它看起来真的很笨重。
我将绑定模式设置为TwoWay。看起来OneWay绑定不遵守IsChecked属性。
其次,我没有艾德IsButtonChecked的mutator属性。
然后,在后面的代码中,我更新_isButtonChecked属性并调用INotifyPropertyChanged事件。
真的很笨重...奇怪的是ToggleButton不尊重绑定属性...
iyzzxitl3#
正如我的答案here中所解释的,只需在
DoNothing
命令中的第一个操作中为IsButtonChecked
属性引发PropertyChanged
事件。如果需要,请查看参考答案以了解更多详细信息。添加此答案是为了完整性,以引导找到此问题的人找到一个可能不太笨重的解决方案。