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

視圖模型:

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

帳戶列表正在更新,但列表視圖不顯示列中的修改值。我已經嘗試通過listview.item.refresh()刷新列表視圖。沒有工作。

請幫忙。謝謝!

+0

您已經在使用綁定。爲什麼不更新綁定屬性?如果你實現INotifyPropertyChanged你只需要更新你的MyColumnValue屬性。這是MVVM模式的一個優點。 –

+0

我對INotifyPropertyChanged不熟悉。通過一些教程。我想我現在可以處理這個問題。非常感謝你。 :) – sandaru

+0

「是」它正在工作:) :) :) – sandaru

回答

1

你爲什麼不將CheckBoxIsChecked屬性綁定到您的視圖模型的bool源屬性和處理在視圖模型類設置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