2017-04-04 7 views
0

Ich möchte eine Spalte in einer Listview aktualisieren, wenn das Kontrollkästchen in der gleichen Zeile aktiviert ist. Die Checkbox ist Teil einer Reihe.Aktualisieren Sie eine Listview-Spalte, wenn das Kontrollkästchen aktiviert ist

Ausblick:

Kontrollkästchen:

<CheckBox Tag="{Binding ID}" Checked="chbAccount_checked" Unchecked="chbAccount_Unchecked"/> 

Textblock in der Spalte, die aktualisiert werden müssen:

<TextBlock Text="{Binding MyColumnValue }" /> 

-Code Behind:

private void chbAccount_checked(object sender, RoutedEventArgs e) 
{ 
    CheckBox chb = sender as CheckBox; 
    int Id= Convert.ToInt16(chb.Tag); 
    ViewModel.UpdateColumnValue(Id); 
    myListView.ItemsSource = ViewModel.Accounts; 
    this.myListView.UpdateLayout();    
} 

Ansichtsmodell:

public void UpdateColumnValue(int Id) 
{ 
    foreach(var a in Accounts) 
    { 
     if(a.ID == Id) 
     { 
      a.MyColumnValue = "Yes"; 
     } 
    } 
} 

Die Kontoliste wird aktualisiert, aber die Listenansicht zeigt die geänderten Werte in der Spalte nicht an. Ich habe versucht, Listenansicht von listview.item.refresh() zu aktualisieren. Hat nicht funktioniert.

Bitte helfen. Vielen Dank!

+0

Sie verwenden bereits Bindungen. Warum nicht die gebundene Eigenschaft aktualisieren? Wenn Sie INotifyPropertyChanged implementieren, müssen Sie nur Ihre MyColumnValue-Eigenschaft aktualisieren. Das ist ein Vorteil des MVVM-Musters. –

+0

Ich war nicht vertraut mit INotifyPropertyChanged. Ging durch einige Tutorials. Ich denke, dass ich jetzt damit umgehen kann. Vielen Dank. :) – sandaru

+0

Und "ja" es funktioniert :) :) :) – sandaru

Antwort

1

Warum Sie nicht binden die IsChecked Eigenschaft des CheckBox zu einer bool Quelle Eigenschaft Ihrer Ansicht Modell und zu handhaben, die Logik der Einstellung der MyColumnValue Eigenschaft in der Ansicht Modellklasse:

<CheckBox Tag="{Binding ID}" IsChecked="{Binding IsChecked}"/> 

private bool _icChecked; 
public bool IsChecked 
{ 
    get { return _icChecked; ; } 
    set { _icChecked; = value; NotifyPropertyChanged(); UpdateColumnValue(Convert.ToInt32(ID)); } 
} 

Stellen Sie sicher, dass die View-Modellklasse die Schnittstelle INotifyPropertyChanged korrekt implementiert.

+0

Ich habe INotifyPropertyChanged verwendet und es funktioniert. Vielen Dank..! :) – sandaru

Verwandte Themen