选中复选框时更新 Listview 列

Update a Listview column when checkbox is checked

我想在同一行中选中复选框时更新列表视图中的列。复选框是行的一部分。

查看:

复选框:

<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() 刷新列表视图。没用。

请帮忙。谢谢!

为什么不将 CheckBoxIsChecked 属性 绑定到视图模型的 bool 源 属性 并处理逻辑在视图模型中设置 MyColumnValue 属性 class:

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

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

确保视图模型 class 正确实现了 INotifyPropertyChanged 接口。