如何在DataGrid中将属性与Checkbox绑定?

时间:2018-07-13 20:12:07

标签: c# wpf data-binding datagrid

我有一个简单的类,我希望能够将属性与DataGrid绑定。

public class Param : INotifyPropertyChanged
{
    private bool isParamSelected;
    public bool Select
    {
        get { return isParamSelected; }
        set
        {
            isParamSelected = value;
            NotifyPropertyChanged();
        }
    }
    public string Name { get; set; }
    public string Description { get; set; }
    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

这是我的.xaml代码:我需要在第一列中添加复选框。我不使用DataGridCheckBoxColumn,因为它需要单击两次才能选中一个框。只需单击一个简单的CheckBox,即可对其进行检查。

<DataGrid Name="AccumGrid" AutoGenerateColumns="False">
    <DataGrid.Columns >
        <DataGridTemplateColumn Header="Select">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox IsChecked="{Binding Path=Select, Mode=TwoWay}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
        <DataGridTextColumn Header="Description" Binding="{Binding Description}"/>
    </DataGrid.Columns>
</DataGrid>

我的问题是,当我将Select属性绑定到CheckBox <CheckBox IsChecked="{Binding Path=Select, Mode=TwoWay}" />时,它无法识别它,并给我“无法解析符号'Select'”。我可以选中该框,但它不会更新“选择”属性。我有一个参数列表AccumList,其中没有几个对象。我也AccumGrid.ItemSources = AccumList在这里我想念什么?

我已经尝试过<DataGridCheckBoxColumn Header="Select" Binding="{Binding Path=Select, Mode=TwoWay}"/>,并且可以正常运行,但是如前所述,我不想双击复选框。

1 个答案:

答案 0 :(得分:0)

将绑定的UpdateSourceTrigger设置为PropertyChanged(请注意,Mode="TwoWay"是多余的,因为这是此属性的默认设置):

<CheckBox IsChecked="{Binding Select, UpdateSourceTrigger=PropertyChanged}" />

但是不确定为什么需要这样做,因为DefaultUpdateSourceTrigger依赖项属性的FrameworkPropertyMetadata的{​​{1}}值已经是CheckBox.IsCheckedProperty