【问题标题】:WPF checkbox IsChecked property does not change according to binding valueWPF 复选框 IsChecked 属性不会根据绑定值更改
【发布时间】:2010-07-30 21:47:24
【问题描述】:

这是我的代码:

xaml 方面: 我使用数据模板与项目“dataType1”绑定

<DataTemplate DataType="{x:Type dataType1}">
    <WrapPanel>
        <CheckBox IsChecked="{Binding Path=IsChecked, Mode=TwoWay}" Command="{Binding Path=CheckedCommand} />
        <TextBlock Text="{Binding Path=ItemName, Mode=OneWay}" />
    </WrapPanel>
</DataTemplate>

然后我创建一个包含“dataType1”类型的项目的组合框

<ComboBox Name="comboBoxItems" ItemsSource="{Binding Path=DataItems, Mode=TwoWay}">

这里是dataType1的定义:

class dataType1{public string ItemName{get; set;} public bool IsChecked {get; set;}}

场景是我准备了一个 dataType1 列表并将其绑定到 ComboBox,ItemName 完美显示,而 CheckBox IsChecked 值始终未选中,无论 dataType1 中“IsChecked”的值如何。

在 wpf 的 CheckBox 中绑定 IsChecked 属性是否需要特殊处理?

梁彼得

【问题讨论】:

    标签: wpf data-binding checkbox


    【解决方案1】:

    您在这里遇到的问题是CheckBox 不知道dataType1.IsChecked 的值何时更改。要解决此问题,请将您的 dataType1 更改为:

    class dataType1 : INotifyPropertyChanged
    { 
        public string ItemName { get; set; }
    
        private bool isChecked;
        public bool IsChecked 
        {
            get { return isChecked; }
            set 
            {
                if (isChecked != value)
                {
                    isChecked = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("IsChecked"));
                    }
                }
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }
    

    所以现在,当属性值发生变化时,它会通过引发PropertyChanged 事件来通知绑定需要更新。

    此外,还有一些更简单的方法可以避免您编写尽可能多的样板代码。我用BindableObject from Josh Smith

    【讨论】:

    • 对不起,我已经在 Wilka 建议的 dataType1 中实现了 INotifyPropertyChanged 的​​细节。实际上我正在使用 MVVM 模型,并且在 ViewModel 中有一个 List 。 List 还实现了 propertyChanged 方法。但复选框仍然无法显示 IsChecked 的值。
    猜你喜欢
    • 1970-01-01
    • 2015-03-28
    • 2013-02-11
    • 2013-10-27
    • 1970-01-01
    • 2015-05-19
    • 2012-04-12
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多