【问题标题】:How to get <checkbox> state inside <datagridtemplatecolumn> on any row's checkbox event in datagrid如何在数据网格中的任何行的复选框事件中获取 <datagridtemplatecolumn> 内的 <checkbox> 状态
【发布时间】:2014-04-11 07:43:03
【问题描述】:

我的 WPF 应用程序中有一个数据网格 - dgUserSession。 它包含 3 列,其中只有 2 个文本列与数据库绑定,第一个是手动创建的复选框。

<DataGridTemplateColumn>
                                    <DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <CheckBox IsChecked="False" Name="userSelection" Checked="DataGridCheckBox_Checked" Unchecked="DataGridCheckBox_Unchecked"/>
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                    <DataGridTemplateColumn.HeaderTemplate>
                                        <DataTemplate>
                                            <CheckBox Checked="chkHeader_Checked" Unchecked="chkHeader_Unchecked" Name="headerSelection">
                                            </CheckBox>
                                        </DataTemplate>
                                    </DataGridTemplateColumn.HeaderTemplate>
                                </DataGridTemplateColumn>

我想遍历所有四个事件中的每一行状态

private void chkHeader_Checked(object sender, RoutedEventArgs e)
    { 
        for (int i = 0; i < dgUserSession.Items.Count; i++)
        {
}
}

但是在这个迭代过程中如何让复选框被选中呢? 我在护目镜上花了 3 小时,但没有结果。

提前致谢。

【问题讨论】:

  • 我想做类似的事情:var mycheckbox = dgUserSession.Columns[0].GetCellContent(.....) 作为每行复选框的复选框,并根据选中或未选中结果执行操作。
  • 您尚未发布任何有关您正在绑定的属性的信息
  • 这是手动创建的复选框 - 执行某些任务。如果选中行中的复选框,则执行任务。我没有绑定任何属性。这就像我页面的 xaml。
  • @sapatelbaps 我不确定我是否完全理解你的问题,为什么不使用“DataGridCheckboxColumn”并绑定它的状态?
  • @sapatelbaps 你说的我需要双击是什么意思?

标签: c# wpf checkbox datagrid datatemplate


【解决方案1】:

在 WPF 中,始终最好以 UI 所需的形式创建数据类型类。我的意思是,不是数据绑定到DataGrid 中的三列中的两列,而是绑定到所有三列。如果将bool 属性添加到DataGrid 的每一行中显示的类中,则可以从该类中访问Checkbox 的值。

如果您没有将自定义类型的集合数据绑定到您的DataGrid.ItemsSource,那么我建议您这样做。只需创建一个类(实现 INotifyPropertyChanged 接口)并为每列(在您的情况下为 3)具有一个属性。然后将该类型的 ObservableCollection 数据绑定到您的 DataGrid.ItemsSource 属性:

public ObservableCollection<YourDataType> Items { get; set; }

...

然后在 YourDataType 类的属性设置器中,每次更改任何值时,您都可以访问每个属性/列的值:

public someType SomeProperty
{
    get { return someProperty; }
    set 
    {
        someProperty = value;
        NotifyPropertyChanged("SomeProperty");
        // each time this is changed, you have access to the other property values here
    }
}

您还可以遍历集合以查找Checkboxes 的值:

foreach (YourDataType item in Items)
{
    bool checkBoxValue = item.NewBoolProperty;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-09
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    相关资源
    最近更新 更多