首页 文章

隐藏/显示WPF DataGrid中的列时出现InvalidOperationException

提问于
浏览
0

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

我有一个显示/隐藏特定列的按钮,它可以在一台(快速,图形卡,.NET 4.5)机器上正常工作,但不能在另一台(慢速,无图形硬件,.NET 4.0)机器上工作 .

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

查看事件查看器, DataGridAddLogicalChild 方法中抛出异常,该方法调用 ChangeLogicalParent (我假设在列中添加 - 注意我无法使用断点调试此函数,因为我在运行它的机器上没有已安装Visual Studio)

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

2 回答

  • 0

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

    <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设置为visible,将false设置为false .

  • 1

    信不信由你...将.NET版本从4.0更新到4.5修复了问题!

相关问题