wpf - 绑定 WPF TabControl和 DataGrid Bug,Bug 和 Bug

  显示原文与译文双语对照的内容
54 3

对于每个人,我在 WPF 。TabControl和DataGrid中发现了不同的问题。尤其是如果 TabControl bound绑定。

我发现的问题:

  • switch 选项卡前后不可见,DataGrid中的选择不可见
  • DataGrid在选项卡 switch 上丢失排序( 在卸载时清除 CollectionView.GetDefaultCollection的SortDescriptions )
  • 如果DataGrid单元格具有焦点( 处于编辑模式),并且单击另一个选项卡,则会发生两种情况:1.) 将不更新绑定对象;2.) 如果对象无效,你将收到编辑期间不允许的错误,
  • 如果你正在使用绑定的和 DataTemplates,则DataGridComboBox和可能其他控件会清除它们的值,如果你使用。清除所有选定内容。

现在我的问题是:在这个场景中是否有第三方控件能更好地执行?

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

因为没有足够的人来解决这个问题,我得到了微软的回答。我知道一些修补程序,但是它们是一些不清洁的( f 。使用反射) 也许你有一些想法?

时间:原作者:0个回答

123 3

嗯,虽然我打赌这里没有 Bug 。我想微软甚至没有看过那些东西。他们可以能永远不会这样做。如果你可以以发布或者上传你可以能认为他们都有错误的代码。

另外,对TabControl的绑定意味着什么?

这是我关于你在问题中给我们的信息的反馈。1 ) 选择某些东西,单击任何地方,无论如何,将失去焦点,选择将变为灰色。2 ) 卸载意味着从VisualTree中移除控件,因此必须清除CollectionView才能释放内存。这是好的,因为你不希望内存泄漏。3 ) 如果单元格模板的编辑包含应该更新焦点的绑定来源的控件,那么确保将发生。如果你正在使用TabItems模板,那么模板将会重复使用( 。具有相同实例的方法),因这里可以能不是 Bug 。所以DataGrid可能会大喊"我编辑手机的时候不要乱搞"。4 ) 与 #3 中相同,它取决于你做什么以及如何定义模板。如果模板位于资源中,并且模板在资源中,则该模板将被重用。

请给我们发代码,让我们看看。我打赌你可能做了一些非常"wpf不太可能"的事情。: )

如果这些事实真的是"车"( 它的他人审查同样的行为),我认为它们有解决方法。: )

我个人觉得,所有这些事情都发生了,因为你使用数据绑定 TabControl 。无论什么意思,我很兴奋地看到数据绑定 TabControls,它们是如何绑定的?如何定义这些模板。

原作者:
69 2

我有同样的问题。

修复DataGridComboBox问题可以能是指在选择另一个选项卡时,如果从视觉树中移除 DataGrid,则将ComboBox的lsn指定为DataContext属性:

 <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>
原作者:
...