我有一个网格,每行(其中300行)由“字符串|字符串|整数|字符串|检查”组成。例如,如果我单击第7行中的复选框,则不会发生任何异常情况。但是,如果我单击另一行上的另一个复选框,则可能会得到其他10行,并且其复选框已选中,但是这些其他复选框无法执行与它们关联的代码。
<DataGridTemplateColumn Width="*" Header="Add">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
答案 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
}
}