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属性!

感谢

WPF将属性绑定到Datagrid

这听起来像是混淆了数据网格在哪里寻找"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>