绑定到datagridtemplatecoluml中的复选框

本文关键字:复选框 datagridtemplatecoluml 绑定 | 更新日期: 2023-09-27 18:01:53

我试图使用DataGridTemplateColumnCheckBox作为DataTemplate中的唯一项目。我还不能让绑定与我的视图模型一起工作。绑定工作如预期的DataGridCheckBoxColumn,但与DataGridCheckBoxColumn的问题是,用户必须点击两次,以便选中/取消选中复选框。我发现了其他的帖子,建议在datagridtemplatecolum列内使用这个复选框,它的工作方式如预期的那样,只需要一次点击来操作复选框。现在我只需要得到绑定。

我更愿意在xaml中实现绑定,而不是在后台代码中。

下面是相关的示例:

<DataGrid Name="BatchRecordParameters">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Extract">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox IsChecked="{Binding Path=ShouldExtract, Mode=TwoWay}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
<!--    <DataGridCheckBoxColumn Binding="{Binding Path=ShouldExtract}" Header="Extract" />-->
        <DataGridTextColumn Binding="{Binding Path=ParameterName}" Header="Parameter Name" IsReadOnly="True" />
        <DataGridTextColumn Binding="{Binding Path=ParameterValue}" Header="Parameter Value" IsReadOnly="True" />
    </DataGrid.Columns>
</DataGrid>

在上面的代码片段中,DataGridCheckBoxColumn被注释掉了—绑定适用于该列,但是需要在复选框上单击两次。Checkbox有我最近的绑定尝试。我已经根据我读过的不同帖子尝试了许多变化。

如果有帮助的话,我的视图模型中的支持属性和对象如下:

public class ParameterData
{
    public bool ShouldExtract { get; set; }
    public string ParameterName { get; set; }
    public string ParameterValue { get; set; }
}
public IObservableCollection<ParameterData> BatchRecordParameters
{
    get { return batchRecordParameters; }
    set
    {
        batchRecordParameters = value;
        NotifyOfPropertyChange(() => BatchRecordParameters);
    }
}

这是一个WPF应用程序,我正在使用Caliburn。Micro作为我的MVVM框架。我找到了十几个解决类似问题的帖子,但没有一个解决方案对我有效。任何帮助得到绑定工作是非常感激的!

绑定到datagridtemplatecoluml中的复选框

首先你需要继承calibre

public class ParameterData : PropertyChangedBase

然后转换属性以实现通知更改

 public bool ShouldExtract
    {
        get
        {
            return this.shouldExtract;
        }
        set
        {
            if (value.Equals(this.shouldExtract))
            {
                return;
            }
            this.shouldExtract = value;
            this.NotifyOfPropertyChange(() => this.ShouldExtract);
        }
    }

对于XAML,下面的代码就可以了

<DataGridCheckBoxColumn Header="Extract" Binding="{Binding ShouldExtract}"></DataGridCheckBoxColumn>