首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF TabControl和DataGrid bug,bug和bug

WPF TabControl和DataGrid bug,bug和bug
EN

Stack Overflow用户
提问于 2013-11-09 14:07:31
回答 2查看 1.4K关注 0票数 0

对于每个人,我发现WPF、TabControl和DataGrid都有不同的问题。特别是当TabControl ItemsSource被绑定时。

我发现的问题:

  • 切换选项卡来回切换后,DataGrid中的选择是不可见的
  • DataGrid松开选项卡交换机上的排序(卸载时清除SortDescriptions of CollectionView.GetDefaultCollection )
  • 如果DataGrid单元格具有焦点(处于编辑模式),并且单击另一个选项卡,则可能发生两种情况:1。绑定对象不会被更新;)如果对象无效,您将收到编辑过程中不允许的错误DeferRefresh,或者类似于以下内容
  • 如果使用绑定TabControls和DataTemplates,则切换到另一个选项卡时,TabControls和其他控件可能会清除它们的值。这将清除任何选择。

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

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

我从微软那里得到了答案,因为没有足够的人来解决这个问题。我知道一些解决办法,但它们确实有些不干净(f.e。使用反射)。也许你有什么想法?

EN

回答 2

Stack Overflow用户

发布于 2013-11-09 20:56:16

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

顺便问一下,TabControl ItemsSource是绑定的是什么意思?

这是我从你在问题中给我们的信息中得到的反馈。1)你选择了什么东西,你点击任何地方,无论是选项卡还是其他窗口,你都会失去焦点,选择会把不活跃的方式变成略带灰色的颜色。2)卸载意味着从VisualTree中删除一个控件,因此必须清除CollectionView以释放内存。这是好的,因为你不希望内存泄漏。3)如果单元格的编辑模板包含控件,这些控件将在焦点丢失时更新绑定的源,则肯定会发生这种情况。如果您碰巧为TabItems使用了一个模板,那么该模板将大部分被重用(用相同的实例表示),因此您最终可能会从DataGrid的屁股上拿走座位,这也不是一个bug,而是一些您也不希望发生的事情。因此,DataGrid可能会大喊“哟,在我编辑一个单元格的时候,不要胡闹”。4)与#3一样,它取决于您在做什么以及如何定义模板。大多数情况下,如果模板在具有密钥的资源中,则模板将被重用。

只需张贴我们的代码,请让我们看看。我敢打赌你可能在做一些非常“不太可能”的事情。:)

如果这些事情真的是“小车”(其他人也会回顾同样的行为),我敢打赌,它们是有解决办法的。:)

就我个人而言,我有一种感觉,所有这些事情的发生都是因为您使用的是数据绑定TabControl。不管那可能意味着什么。我很高兴看到什么是数据绑定TabControls以及它们是如何绑定的?如何定义这些模板。

票数 0
EN

Stack Overflow用户

发布于 2014-03-12 10:17:26

我也有同样的问题。

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

代码语言:javascript
复制
    <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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19876890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档