对于每个人来说,我发现了WPF,TabControl和DataGrid的不同问题。特别是如果TabControl ItemsSource被绑定。
我发现的问题:
现在我的问题是:在这种情况下,是否有任何ThirdParty控件表现更好?
您也可以在这里投票http://connect.microsoft.com/VisualStudio/feedback/details/807849/databound-tabcontrol-bugs
我从微软那里得到了答案,因为没有足够的人解决这个问题。 我知道一些修复,但它们有些真的不干净(例如使用反射)。也许你有一些想法?
答案 0 :(得分:0)
顺便说一下,TabControl ItemsSource是什么意思?
以下是我对您在问题中提供的信息的反馈。 1)你选择的东西,你在任何地方点击,无论是tabitem还是其他窗口,你都会失去焦点,选择将变为无效意味着略带灰色的颜色。 2)卸载意味着从VisualTree中删除控件,因此必须清除CollectionView以释放内存。这很好,因为你不想要内存泄漏。 3)如果单元格的编辑模板包含控件,这些控件将在焦点丢失时更新绑定的源,那么肯定会发生。如果您恰好使用TabItems的模板,那么模板将主要被重用(具有相同实例的方式),因此您可能最终将座位远离DataGrid'屁股,这更不是一个错误而是您不想要的东西也发生在你身上。因此,在编辑单元格时,DataGrid可能会大喊“哟,不要傻瓜”。 4)与#3相同,它取决于你在做什么以及如何定义模板。主要考虑模板是否在带有密钥的资源中,然后模板将被重用。
请发布我们的代码,让我们一起来看看。我打赌你可能会做一些非常“不太可能”的事情。 :)
如果这些事情恰好是“手推车”(其他人审查相同的行为),我打赌他们有解决方法。 :)
我个人觉得所有这些事情都发生了,因为你正在使用数据绑定TabControl。无论这意味着什么。我很高兴看到什么是数据绑定TabControls以及它们如何绑定?你如何定义这些模板。
答案 1 :(得分: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>