我的WP7应用程序中有这个ToggleButton,我绑定到ViewModel中的一个属性。我也有一个ToggleButton命令,当单击该按钮时它确实起作用。

根据该命令的结果,我设置绑定到ToggleButton.IsChecked属性的属性。但是,无论我将属性设置为什么,切换按钮都会保留自己的生命,并且仅在未选中和选中之间切换。这是预期的行为还是错误?

似乎切换按钮在单击时失去了绑定,这是真的吗?我想要绑定它的原因是我并不总是想要更改检查状态,因为命令中的逻辑可能会失败,例如网络已关闭,因此无法设置后端所需的数据,依此类推。

任何解决此问题的方法?

Xaml:

<ToggleButton x:Name="ToggleButton" Style="{StaticResource ToggleButtonStyle}" IsChecked="{Binding IsToggleButtonChecked}, Mode=OneWay}" Command="{Binding ToggleButtonCommand, Mode=OneWay}" CommandParameter="{Binding ToggleButtonCommandParameter}"/>


样式根据状态设置按钮的图像。当单击按钮时,该命令执行逻辑,并且如前所述,将IsToggleButtonChecked设置为所需值。我都在IsChecked上尝试过OneWay和TwoWay,但看不到区别。

ViewModel:

public const string IsToggleButtonCheckedPropertyName = "IsToggleButtonChecked";

    private bool _isToggleButtonChecked;

    public bool IsToggleButtonChecked
    {
        get { return _isToggleButtonChecked; }

        set
        {
            if (_isToggleButtonChecked == value)
            {
                return;
            }

            _isToggleButtonChecked = value;

            RaisePropertyChanged(IsToggleButtonCheckedPropertyName);
        }
    }


每当我想更改ToggleButton的选中状态时,都会设置此属性。

最佳答案

确保将对绑定属性所做的任何更改通知ToggleButton

XAML

<ToggleButton Click="OnClicked"
              IsChecked="{Binding IsChecked, Mode=TwoWay}" />


C#

private bool _isChecked = false;
public bool IsChecked
{
  get { return _isChecked; }
  set
  {
    if( value != _isChecked ) {
      _isChecked = value;
      NotifyPropertyChanged( "IsChecked" );
    }
  }
}


在后面的代码中将逻辑设置为IsChecked = false;以取消选中该按钮。

关于c# - 在WP7中绑定(bind)ToggleButton的IsChecked属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7743074/

10-10 03:01