2017-04-04 11 views
0

同じ行でチェックボックスをオンにすると、リストビュー内の列を更新します。チェックボックスは行の一部です。チェックボックスがオンのときにリストビューの列を更新します。

ビュー:

チェックボックス:更新されるために必要なカラム内

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

テキストブロック:背後に

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

コード:

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();    
} 

のViewModel:

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

アカウントリストは更新されていますが、リストビューには変更された値が列に表示されません。 listview.item.refresh()でリストビューをリフレッシュしようとしました。うまくいきませんでした。

助けてください。ありがとうございました!

+0

既にバインディングを使用しています。バインドされたプロパティを更新しないのはなぜですか? INotifyPropertyChangedを実装する場合は、MyColumnValueプロパティを更新するだけで済みます。これがMVVMパターンの利点の1つです。 –

+0

私はINotifyPropertyChangedに慣れていませんでした。いくつかのチュートリアルを行った。私は今これを処理できると思う。どうもありがとうございました。 :) – sandaru

+0

"はい"それは働いています:) :) – sandaru

答えて

1

あなたのビューモデルのboolソースプロパティにCheckBoxIsCheckedプロパティをバインドし、ビューモデルクラスでMyColumnValueプロパティを設定するロジックを処理していない理由:

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

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

ビューモデルクラスがINotifyPropertyChangedインターフェイスを正しく実装していることを確認してください。

+0

私はINotifyPropertyChangedを使いました。ありがとうございました..! :) – sandaru

関連する問題