【问题标题】:How to set up the datagrid control from the Xceed\Extended WPF Toolkit with checkbox column and binding如何使用复选框列和绑定从 Xceed\Extended WPF 工具包设置数据网格控件
【发布时间】:2013-12-10 19:36:05
【问题描述】:

我正在尝试将 WPF 数据网格换成 xceed\Extended WPF Toolkit DataGridControl。

我需要对复选框列中的点击事件做出反应...以汇总其他一些列。

在现有的数据网格中,我有一个复选框列,它绑定到一个可观察的集合,如果选中\未选中任何复选框,我会调用一个方法。我为此使用的 xaml 是这样的:

<DataGridTemplateColumn Width="40" Header="Inc">
<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <CheckBox
            IsChecked="{Binding Include ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
            Checked="CheckBoxUpdated" Unchecked="CheckBoxUpdated" />
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

对于 xceed datagridcontrol,我从下面的简单语法开始,初始绑定似乎没问题,但我没有点击事件来响应:

<xcdg:Column   FieldName="Include" Title="Inc" />

现在我尝试使用 xceed datagridcontrol 执行类似于原始代码的操作,例如:

<xcdg:Column   FieldName="Include" Title="Inc" Width="*" >
<xcdg:Column.CellContentTemplate>
    <DataTemplate>
        <CheckBox IsChecked="{Binding Include ,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Click="CheckBoxUpdated"/>
    </DataTemplate>
</xcdg:Column.CellContentTemplate>

但我认为这不是正确的语法。似乎绑定不起作用...基于集合的初始值。

(注意后面的代码将这个项目的来源设置为 dg.ItemsSource = collectionView;)

关于如何正确设置复选框 DataTemplate 和绑定的任何想法?

谢谢

【问题讨论】:

  • 为什么不使用DataGridCheckBoxColumn
  • 可能是因为虽然它会使用 DataGridCheckBoxColumn 进行编译,但每次加载网格时都会失败。即它不起作用。
  • 会在标题中放置一个“全选”复选框吗?

标签: wpf checkbox wpftoolkit


【解决方案1】:

我刚刚在xceed forums 找到了一个帖子,它提供了我需要的语法,即设置 FieldName=".",而不是 FieldName="Include" 。我的猜测是拥有 FieldName="Include" 和 "{Binding Include ..." 会混淆绑定。

<xcdg:Column   FieldName="." Title="Inc" Width="*" >
 <xcdg:Column.CellContentTemplate>
  <DataTemplate>
    <CheckBox IsChecked="{Binding Include ,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Click="CheckBoxUpdated"/>
</DataTemplate>
</xcdg:Column.CellContentTemplate>

【讨论】:

  • 这行得通!路径应该是 .,并且是模板中的完整路径。
  • 这仅在您绑定到需要执行此技巧的单个字段时才有效。否则它只会让你将一列绑定到 FieldName =“。”
【解决方案2】:

您对问题的解决方案对我不起作用,但是什么起作用了:

要么

<xcdg:Column ...

如果类型是布尔值,它将自动为其创建一个复选框,但您必须单击 3 次(列编辑 ->(取消)选中 -> 列输出),这可能很烦人。

<xcdg:Column FieldName="ckb1" DisplayMemberBinding="{Binding Path=IsThisChecked,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" >
                    <xcdg:Column.CellContentTemplate>
                        <DataTemplate>
                            <CheckBox IsChecked="{xcdg:CellEditorBinding NotifyOnSourceUpdated=True}" HorizontalAlignment="Center" />
                        </DataTemplate>
                    </xcdg:Column.CellContentTemplate>
                </xcdg:Column>

不需要所有的点击

【讨论】:

  • 不幸的是,Xceed 决定在他们的DataGridCheckBox.OnApplyTemplate 方法中留下一行代码:this.ChildCheckBox.Background = (Brush) new SolidColorBrush(Colors.Blue); 如果您喜欢带有不可覆盖的任意蓝色背景的复选框,那就去吧! :)
  • 他们是否废弃了“DisplayMemberBinding”?我只看到无法绑定的 DisplayMemberBindingInfo。
猜你喜欢
  • 2010-12-06
  • 2011-03-04
  • 2014-04-09
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 2013-03-09
相关资源
最近更新 更多