wpf ToggleButton IsChecked未粘附到绑定属性

ukxgm1gy  于 2022-12-14  发布在  其他
关注(0)|答案(3)|浏览(202)

所以我有一个切换按钮如下:

<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。这可以防止在当前状态为启用时发生按钮单击。

z9zf31ra

z9zf31ra1#

您已将绑定模式设置为OneWay,请将其设置为TwoWay

<ToggleButton Command="{Binding DoNothing}"
              CommandParameter="{Binding ServerViewModel}"
              Content="Click Me!"
              IsChecked="{Binding IsButtonChecked,
                                  Mode=TwoWay}" />
olqngx59

olqngx592#

为了它的价值,这是我所做的...它看起来真的很笨重。
我将绑定模式设置为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不尊重绑定属性...

iyzzxitl

iyzzxitl3#

正如我的答案here中所解释的,只需在DoNothing命令中的第一个操作中为IsButtonChecked属性引发PropertyChanged事件。
如果需要,请查看参考答案以了解更多详细信息。添加此答案是为了完整性,以引导找到此问题的人找到一个可能不太笨重的解决方案。

相关问题