首页 文章

WPF TabControl和DataGrid错误,错误和错误

提问于
浏览
0

对于每个人,我发现了WPF,TabControl和DataGrid的不同问题 . 特别是如果TabControl ItemsSource被绑定 .

我发现的问题:

  • 切换Tabs来回后,DataGrid中的选择不可见

  • DataGrid在选项卡切换上丢失排序(卸载时清除CollectionView.GetDefaultCollection的SortDescriptions)

  • 如果DataGrid单元格具有焦点(处于编辑模式)并且您单击另一个选项卡,则可能发生以下两种情况:1 . )绑定对象将不会更新; 2.)如果对象无效,则会在编辑期间收到错误DeferRefresh,或类似的内容

  • 如果使用绑定的TabControls和DataTemplates,如果切换到另一个选项卡,DataGridComboBox和可能的其他控件会清除它们的值 . 这清除了任何选择 .

所以现在我的问题是:在这种情况下,是否有任何ThirdParty控件表现更好?

你也可以在这里投票http://connect.microsoft.com/VisualStudio/feedback/details/807849/databound-tabcontrol-bugs

我得到了微软的回答,它无法解决,因为没有足够的人有这个问题 . 我知道一些修复,但它们有些真的不干净(例如使用反射) . 也许你有一些想法?

2 回答

  • 0

    嗯,有趣的帖子虽然我打赌所有没有错误 . 我认为微软甚至没有看过这些东西 . 他们可能永远不会 . 如果您可以发布或上传所有这些问题的代码,我可能会认为它们都是错误的错误,我将非常感激 .

    顺便说一下,TabControl ItemsSource是什么意思?

    以下是我对您在问题中提供的信息的反馈 . 1)你选择的东西,你在任何地方点击,无论是tabitem还是其他窗口,你都会失去焦点,选择将变为无效意味着略带灰色的颜色 . 2)卸载意味着从VisualTree中删除控件,因此必须清除CollectionView以释放内存 . 这很好,因为你不想要内存泄漏 . 3)如果单元格的编辑模板包含控件,这些控件将在焦点丢失时更新绑定的源,那么肯定会发生 . 如果您恰好使用TabItems的模板,那么模板将主要被重用(具有相同实例的方式),因此您可能最终将座位远离DataGrid'屁股,这更不是一个错误而是您不想要的东西也发生在你身上 . 因此,在编辑单元格时,DataGrid可能会大喊“哟,不要傻瓜” . 4)与#3相同,它取决于你在做什么以及如何定义模板 . 主要考虑模板是否在具有密钥的资源中,然后模板将被重用 .

    请发布我们的代码,让我们一起来看看 . 我打赌你可能会做一些非常“不太可能”的事情 . :)

    如果这些事情恰好是“四驱车”(其他人审查相同的行为),我打赌他们有解决方法 . :)

    我个人觉得所有这些事情都发生了,因为你正在使用数据绑定TabControl . 无论这意味着什么 . 我很高兴看到什么是数据绑定TabControls以及它们如何绑定?你如何定义这些模板 .

  • 0

    我有同样的问题 .

    修复DataGridComboBox问题可能是将ComboBox的ItemsSource指定为TabControl的DataContext属性而不是DataGrid,因为当您选择另一个选项卡时,DataGrid将从可视树中删除:

    <TabControl x:Name="tabControl" Behaviours:TabContent.IsCached="True">
            <TabItem Header="Tab1" Content="{Binding}" ContentTemplate="{StaticResource Tab1}"/>
            <TabItem Header="Tab2" Content="{Binding}" ContentTemplate="{StaticResource Tab2}"/>
        </TabControl>
    
        <DataTemplate x:Key="Tab1">
            <DataGrid ItemsSource="{Binding Entities}" x:Name="dataGrid">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="100"/>
                    <DataGridTemplateColumn Header="Position" Width="150">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding Position}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                        <DataGridTemplateColumn.CellEditingTemplate>
                            <DataTemplate>
                                <ComboBox SelectedItem="{Binding Position, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                                          ItemsSource="{Binding Path=DataContext.Positions, ElementName=tabControl}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellEditingTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
        </DataTemplate>
    

相关问题