我的复选框不与该成员绑定

时间:2016-07-13 11:32:02

标签: xaml silverlight

假设我们有一个与数据源MyInformation绑定的网格视图。列之一是复选框。我想用它绑定一些东西。

ItemsSource="{Binding MyInformation}"

在ViewModel中。

public ObservableCollection<Container> MyInformation
    {
        get
        {
            if (this.myInformation == null)
            {
                this.myInformation = new ObservableCollection<Container>();
            }
            return this.myInformation;
        }
        set
        {
            if (this.myInformation != value)
            {
                this.myInformation = value;
                this.OnPropertyChanged("MyInformation");
            }
        }
    }

类Container有一个成员“GoodValue”。

public class Container
{
    public bool GoodValue {get;set;}
    //
}

我有与成员的复选框绑定。

<DataTemplate>
  <CheckBox HorizontalAlignment="Center" IsChecked="{Binding GoodValue, Converter={StaticResource ShortToBooleanConverter}}" Click="CheckBox_Checked"></CheckBox>
  </DataTemplate>

我没有在ViewModel中创建属性GoodValue,因为我认为GoodValue是Container的成员。 ObservableCollection自动包含它。

每次我从数据库中读取数据时都会出现问题。该复选框未选中。所以我怀疑我的代码。谢谢你的提示。

1 个答案:

答案 0 :(得分:0)

你可以做两件事:

  1. 检查是否存在绑定错误
  2. 在您的类Container中实施 INotifyPropertyChanged 界面。

    public class Container:INotifyPropertyChanged     {

       private bool _goodValue;
    
        public string GoodValue
        {
            get
            {
                return _goodValue;
            }
            set
            {
                _goodValue = value;
                OnPropertyChanged("GoodValue");
            }
        }
    
        protected void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    }
    
  3. 如果要在集合中插入或删除新项目时通知您的视图, ObservableCollection 是有用的,但如果其中包含的对象未实现InotifyPropertyChanged,则更改为该对象的属性不会影响对视图的任何更改。