【问题标题】:Unable to bind MenuItem IsChecked attribute in WPF无法在 WPF 中绑定 MenuItem IsChecked 属性
【发布时间】:2018-04-03 20:13:17
【问题描述】:

我正在尝试绑定 IsChecked,它是第二次单击时的绑定值。以下是我的 xaml

 <ContextMenu><MenuItem Header="Type"  IsCheckable="True"  IsChecked="{Binding isTypeChecked}" Checked="Type_Click"/>
                                    <MenuItem Header="Price"  IsCheckable="True"  IsChecked="{Binding isPriceChecked}" Checked="Price_Click"/>
                                    <MenuItem Header="Category"  IsCheckable="True"  IsChecked="{Binding isCategoryChecked}" Checked="Category_Click"/>
                                </ContextMenu>

xaml.cs 如下

private void Type_Click(object sender, RoutedEventArgs e)
    {
        MainViewModel _mainWindowViewModel = new MainViewModel();
        DataContext = _mainWindowViewModel;
        _mainWindowViewModel.isTypeChecked = true;
        _mainWindowViewModel.isPriceChecked = false;
        _mainWindowViewModel.isCategoryChecked = false;

        ItemsGrid.Columns[3].Visibility = Visibility.Visible;
        ItemsGrid.Columns[1].Visibility = Visibility.Collapsed;
        ItemsGrid.Columns[2].Visibility = Visibility.Collapsed;
    }

ViewModel 如下

 public class MainViewModel : INotifyPropertyChanged
{
    public MainViewModel() { }       

    private bool _isTypeChecked;
    public bool isTypeChecked { get { return _isTypeChecked; } set { _isTypeChecked = value; NotifyPropertyChanged("isTypeChecked"); } }
    private bool _isPriceChecked;
    public bool isPriceChecked { get { return _isPriceChecked; } set { _isPriceChecked = value; NotifyPropertyChanged("isPriceChecked"); } }
    private bool _isCategoryChecked;
    public bool isCategoryChecked { get { return _isCategoryChecked; } set { _isCategoryChecked = value; NotifyPropertyChanged("isCategoryChecked"); } }

    public event PropertyChangedEventHandler PropertyChanged;
    public void NotifyPropertyChanged(string propName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName)); }

}

找不到我做错了什么 请帮忙

【问题讨论】:

  • 错误是什么?
  • 第二次点击它显示选中的选项,即使我在模型属性上设置了断点并且它没有命中
  • 你能不能详细描述一下,我真的不明白你所说的“显示选中选项”是什么意思
  • 勾选选项必须出现在 IsChecked="{Binding true}" 但它在第二次点击时出现
  • 查看输出窗口是否有绑定错误

标签: c# wpf


【解决方案1】:

最初,您的属性将返回 null。我不确定这是否会导致您看到的问题,但您应该初始化支持变量。大概你会想要 false 开始。

private bool _isTypeChecked =false;

【讨论】:

    【解决方案2】:

    尝试在 MainViewModel 中添加 DataContext = this;。我曾经遇到过类似的问题,并且添加了一点点,它起作用了。

    【讨论】:

      猜你喜欢
      • 2012-03-08
      • 2016-04-26
      • 2011-04-15
      • 2010-09-20
      • 2011-06-22
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      相关资源
      最近更新 更多