选中复选框后,还会选中其他行中的其他复选框

时间:2018-10-27 06:53:37

标签: wpf checkbox datagrid

我有一个网格,每行(其中300行)由“字符串|字符串|整数|字符串|检查”组成。例如,如果我单击第7行中的复选框,则不会发生任何异常情况。但是,如果我单击另一行上的另一个复选框,则可能会得到其他10行,并且其复选框已选中,但是这些其他复选框无法执行与它们关联的代码。

            <DataGridTemplateColumn Width="*" Header="Add">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>                           
                        <CheckBox Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

1 个答案:

答案 0 :(得分:1)

这是因为重复使用了行视觉效果。您可以设置<DataGrid EnableRowVirtualization="False"...,但是如果有很多行,将会对性能产生巨大影响。更好的解决方案是使用ViewModel存储检查状态。然后将值绑定到ViewModel <CheckBox IsChecked="{Binding MyBoolProperty}"...

在ViewModel中,可以在属性更改时调用方法。

public class MyItem
{
    //.... other class info
    //TODO: Implement INotifyPropertyChanged

    private bool _MyBoolProperty = false;
    public bool MyBoolProperty
    {
        get
        {
            return _MyBoolProperty;
        }
        set
        {
            _MyBoolProperty = value;
            MyBoolPropertyChanged();
        }
    }

    private void MyBoolPropertyChanged()
    {
        //do something
    }
}