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

时间:2014-09-24 23:30:09

标签: c# .net wpf datagrid

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

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

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

查看事件查看器时,DataGrid的{​​{1}}方法会抛出异常,该方法调用AddLogicalChild(我假设要添加的列 - 注意我无法使用断点进行调试,因为我运行它的机器没有安装Visual Studio)

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

2 个答案:

答案 0 :(得分: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设置为visible,将false设置为折叠。

答案 1 :(得分:0)

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