WPF将属性绑定到Datagrid
本文关键字:Datagrid 绑定 属性 WPF | 更新日期: 2023-09-27 17:59:17
我已经将ObservableCollection与ItemSource绑定到DataGrid,但是,我想通过ViewModel检索(通过setter)单个属性。
好的,听起来很困惑,我会解释的。
在我的ObservableCollection中,我有一个名为"Active"的属性,所以我希望在用户单击DataGrid中的复选框时设置该元素。
因此XAML
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Active, Mode=TwoWay}" HorizontalAlignment="Center"></CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
当复选框未选中或选中时,我希望它能在ViewModel中触发此代码
private bool m_Active = false;
public bool Active
{
get { return m_Active; }
set
{
m_Active = value;
OnPropertyChanged("Active");
}
}
但即使开启了双向模式,它也不会。为什么?
注意:在DataGrid的SelectedItem属性上,我可以获得SelectedRow,所以基本上我想要选定的Individual属性!
感谢
这听起来像是混淆了数据网格在哪里寻找"Active"属性。由于数据网格绑定到Observable集合,因此可观测集合中的对象需要具有"Active"属性,而不是用于视图的视图模型。然而,如果您实际上想将数据网格的所有行绑定到视图模型上的单个属性,则需要查找祖先树以找到控件的数据上下文,然后绑定到"活动"属性:
<CheckBox IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.Active, Mode=TwoWay}" HorizontalAlignment="Center"></CheckBox>
但是,我想,您希望绑定到可观察集合中对象的"Active"属性。运行应用程序时,请检查输出窗口,如果对象上不存在该属性,则应该会看到绑定错误。
尝试使用CellEditingTemplate
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Active, Mode=TwoWay}" HorizontalAlignment="Center"></CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
希望对有所帮助
您尝试过设置UpdateSourceTrigger吗?
<CheckBox IsChecked="{Binding Active, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center"></CheckBox>