【问题标题】:InvalidOperationException when hiding/showing columns in a WPF DataGrid在 WPF DataGrid 中隐藏/显示列时出现 InvalidOperationException
【发布时间】:2014-09-24 23:30:08
【问题描述】:

我有一个DataGrid,我希望用户能够在上面显示/隐藏列。

我有一个按钮可以显示/隐藏特定列,它在一台(快速、显卡、.NET 4.5)机器上运行良好,但在另一台(慢速、无图形硬件、.NET 4.0)机器上运行良好.

InvalidOperationException 在隐藏然后显示同一列时被抛出...请注意,可以关闭多个列(通过将它们的 Visiblity 设置为 Collapsed),但只要已经关闭的列就会重新打开(将Visibility 设置为Visible)应用程序崩溃并引发异常。

查看事件查看器,在DataGridAddLogicalChild 方法中引发了异常,该方法调用ChangeLogicalParent(我假设在添加的列上-注意我不能用断点调试它我运行它的机器没有安装 Visual Studio)

关于什么可能导致应用程序在一台机器上抛出异常而不是另一台机器的任何想法? .NET 运行时与它有什么关系吗? (在运行应用程序的机器上升级到 .NET 4.5 可能不可行)

【问题讨论】:

    标签: c# .net wpf datagrid


    【解决方案1】:

    我使用以下代码显示/隐藏列

        <DataGrid ItemsSource="{Binding MyView}">
            <DataGrid.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="Show/ Hide">
                        <StackPanel>
                            <ItemsControl ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}, Path=PlacementTarget.Columns, Mode=OneWay}">
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate DataType="{x:Type DataGridColumn}">
                                        <CheckBox Content="{Binding Path=Header, Mode=OneWay}" 
                                                  IsChecked="{Binding Path=Visibility, Converter={StaticResource TrueIfVisibleConverter}}"/>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                        </StackPanel>
                    </MenuItem>
                </ContextMenu>
            </DataGrid.ContextMenu>
          </DataGrid>
    

    TrueIfVisibleConverter 只需将 true 设置为可见,将 false 设置为折叠。

    【讨论】:

    • 我最终使用了来自 here 的代码(我只想能够显示/隐藏某些列),并且似乎在 XAML 中绑定可见性而不是在代码隐藏中设置它修复了抛出异常。但现在我遇到了另一个问题!我想将转换器的源绑定到驻留在不同用户控件中的复选框(网格在其自己的用户控件中),但我觉得这可能是一个完全不同的主题。
    【解决方案2】:

    信不信由你...将 .NET 版本从 4.0 更新到 4.5 解决了这个问题!

    【讨论】:

      猜你喜欢
      • 2011-07-18
      • 2013-12-25
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多