绑定到DataGridTemplateColumn内的Checkbox

时间:2014-05-06 16:19:52

标签: c# wpf xaml caliburn.micro

我正在尝试使用DataGridTemplateColumnCheckBox作为DataTemplate中的唯一项目。我还没有能够使用我的视图模型进行绑定。绑定按预期使用DataGridCheckBoxColumn,但DataGridCheckBoxColumn的问题是用户必须单击两次才能选中/取消选中该复选框。我发现其他帖子建议在DataGridTemplateColumn中使用这个CheckBox,并且按照预期工作只需单击一下即可操作复选框。现在我只需要获得绑定。

我更愿意在xaml中而不是在代码隐藏中实现绑定。

以下是相关的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框架。我找到了十几个解决类似问题的帖子,但没有一个解决方案对我有用。任何有关使绑定工作的帮助都非常感谢!

1 个答案:

答案 0 :(得分:0)

第一,您将需要从caliburn继承

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>