【问题标题】:xamdatagrid Disable column conditionallyxamdatagrid 有条件地禁用列
【发布时间】:2012-07-31 19:42:19
【问题描述】:

我需要禁用一行中的特定单元格,具体取决于同一行其他单元格中的值。

WPF 或 WPF MVVM 方案,欢迎使用这两种解决方案。

我都试过了,都不行!!!

【问题讨论】:

    标签: wpf mvvm xamdatagrid


    【解决方案1】:

    如果我理解正确的话。

    您可能想查看 Datagrid.Columns 部分中的 DataGridTemplateColumn(请参阅下面的代码),因为这允许您为列/单元格设置自己的模板,然后您可以设置启用的属性。以下只是一个简单的解决方案,以后我会拥有它,这样当您更改更新模型的启用复选框时,模型又会启用行中的项目。

            <DataGrid Name="dgrgrid" AutoGenerateColumns="False">                
                <DataGrid.Columns>
                    <DataGridTemplateColumn Header="Name">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBox Text="{Binding Name}" IsEnabled="{Binding Enabled}" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTextColumn Header="Type" />
                    <DataGridTextColumn Header="Size" />
                    <DataGridTextColumn Header="Price"  />
                    <DataGridCheckBoxColumn Header="Row Enabled" Binding="{Binding Enabled}" />
                </DataGrid.Columns>
            </DataGrid>
    

    对于后面的代码,我有一个名为 Cheese 的类的简单可观察集合,它具有您在下面看到的一些属性。 (这是基本的 M-V-VM 技术)

    【讨论】:

    • 哦,我错过的另一件事是,您可以绑定到同一行的其他列或值,然后使用转换器(参见下面的链接)将字符串值转换为可见性或 true false 从而允许您根据其旁边的列中的值禁用列。 wpftutorial.net/ValueConverters.html
    【解决方案2】:

    感谢@Grenter。 我确实通过实现 Converter 类并将其实现为我的 xaml 文件中的静态资源来解决它。 另外,我发现我们可以使用单元格更新或单元格更新事件并在后面的 xaml 代码中编写一些代码行来做同样的事情,这是我通常不喜欢的。

    但是转换器肯定是前进的方向。

    非常感谢!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      相关资源
      最近更新 更多