2016-07-13 4 views
0

Disons que nous avons une vue de grille qui est liée à la source de données MyInformation. L'une des colonnes est une case à cocher. Je veux lier quelque chose avec ça.Ma case à cocher ne lie pas le membre

ItemsSource="{Binding MyInformation}" 

Dans le 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"); 
      } 
     } 
    } 

Le conteneur de classe a un membre "GoodValue".

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

J'ai la case à cocher lier avec le membre.

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

Je n'ai pas la propriété GoodValue créée en ViewModel que je pense GoodValue est membre du conteneur. Le ObservableCollection l'inclut automatiquement.

Le problème est chaque fois que je lis les données de la base de données. La case à cocher n'est pas cochée. Donc je doute de mon code. Merci pour l'indice.

Répondre

0

Vous pouvez faire deux choses:

  1. Vérifiez s'il y a des erreurs de liaison
  2. Mettre en oeuvre INotifyPropertyChanged interface dans votre conteneur de classe.

    Container public class: 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; 
    } 
    

Le ObservableCollection est utile si vous souhaitez notifier à votre point de vue lorsqu'un nouvel élément est inséré ou supprimé de la collection, mais si le L'objet contenu à l'intérieur n'implémente pas InotifyPropertyChanged, les modifications apportées aux propriétés de cet objet n'affecteront aucune modification de votre vue.

+1

Trouvez simplement l'erreur. Mon ShortToBooleanConverter est faux. Quand vrai c'est 1, faux est 0. Mais dans mon cas, la valeur dans la table n'est pas 1/0. Je dois réécrire le convertisseur. – Bigeyes