填充的DataGrid不会让App优雅地关闭

时间:2010-08-19 15:40:48

标签: c# wpf datagrid

我对WPF中的DataGrid控件有点新意。我已经在UserControl中构建了一个DataGrid,并将该UserControl包装在一个Window中。 DataGrid:

    <DataGrid x:Name="mDataGrid" RenderTransformOrigin="0.167,-0.077" Margin="-2.572,0,5.428,0" IsReadOnly="True" AlternatingRowBackground="#1EA2A2E2" AutoGenerateColumns="False" Height="389" VerticalAlignment="Top" Grid.ColumnSpan="5">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Term" Binding="{Binding Term}"/>
            <DataGridTextColumn Header="Alternate" Binding="{Binding Alternate}"/>
            <DataGridTextColumn Header="Document" Binding="{Binding Document}"/>
            <DataGridTextColumn Header="POS" Binding="{Binding POS}"/>
            <DataGridTextColumn Header="Meaning" Binding="{Binding Meaning}"/>
        </DataGrid.Columns>
    </DataGrid>

我用来准备和显示控件的C#代码:

            ObservableCollection<LexiconEntry> oc = new ObservableCollection<LexiconEntry>();

            foreach (KeyValuePair<string,LexiconEntry> kvp in lex.Entries)
            {
                LexiconEntry le=kvp.Value;
                oc.Add(le);
            }

            mDataGrid.ItemsSource = oc;

现在,如果我在不调用上述例程的情况下运行应用程序 - 意味着DataGrid为空 - 一切都正常关闭。另一方面,如果我调用上面的例程将ItemSource链接到DataGrid,则在关闭所有窗口后进程仍然运行。我需要使用任务管理器或从VS内部移位+ F5来杀死它。窗口关闭,我已经通过Window_Closing和Window_Closed事件处理程序进行了跟踪来验证这一点,但是进程不会自行关闭。我不太确定如何在调试器中查看是什么让它保持活着,但唯一导致应用程序是否正常退出的区别在于填充DataGrid。

我该如何解决这个问题?我已经尝试将DataGrid的ItemSource从其父窗口的OnClosing事件中设置为null,但这没有帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

麦克, 字典中的LexiconEntry对象来自哪里?你在lex.Entries中有多少对?

我的建议是尝试创建一个类似于LexiconEntry的新测试类,并添加与lex.Entries中一样多的测试类。如果事情运作良好,问题就出在字典中的LexiconEntry对象上。