|
|
1
3
如果您试图从组合中控制TabControl,那么在我看来它有点落后。。如果更改tab控件上的SelectedIndex以将其绑定到combo,则应该可以:
|
|
|
2
1
请注意,我们可以在选项卡和组合控件的SelectedIndex之间创建双向绑定(本例中为默认绑定),而不是创建从选项卡控件到组合框的绑定,反之亦然。接下来,让我们向TabItems添加一些内容。此时,与Steve的建议类似,我们已经解决了“控制”问题。也就是说,更改选定的TabItem会更改选定的ComboBox项(您必须在这一点上信任我或继续阅读!),更改ComboBox会更改选定的TabItem。伟大的 上述xaml还将DiplayMemberPath属性更改为“Name”。我想你会发现这消除了hughdbrown的“奇怪结果”。回想一下,Header属性(对象)是由ContentPresenter包装的。我认为,如果没有提供模板,默认行为是在TextBlock中将Header对象显示为字符串。因此,“奇怪的结果”正确地报告TextBlock控件不包含头属性。
这实际上产生了一个有趣的结果,并利用了我们添加到每个TabItem中的内容。当此代码运行时,您会注意到组合框现在显示所选选项卡项的内容。此外,列表现在为每个选项卡项显示“System.Windows.Controls.TabItem…”。我们可以将TextBlock绑定更改为{binding Header}并显示Header对象,但组合框仍然显示所选TabItem的内容。由于周五晚上已经很晚了,而且世界上没有足够的啤酒,所以我没有探究可能的原因。然而,我确实有一个解决办法!
转换器只是从TabControl的Items集合创建一个新集合,该集合包含来自每个TabItem的字符串化标题对象。这适用于简单的头对象,但显然有局限性。现在让我们考虑一下如何在XAML中使用这一点。
请记住,ItemsSource绑定中使用的ValueConverter返回一个新集合。在本例中,我们将TabControl的Items集合转换为string集合。不要忘记创建转换器静态资源!看起来像这样。
现在,使用转换器,整个蜡球按预期工作。 仍然让我困惑的是,为什么组合框会在列表中显示TabItem标题和TabItem内容作为选择。毫无疑问,有一些明显的解释,但正如我所说,今天是星期五。。。
|
|
|
3
0
我一直在玩这个。选择后,组合框数据绑定的源会发生一些变化。或者别的什么。 我添加了诊断名称空间:
我改变了你的<网格/>输入带有大喇叭号码的文本框,这样我就可以看到事情真的在发生变化:
在启动时,我尝试在代码中设置一次数据绑定:
在选择和更改TabItem后,它仍然会将CombobBox切换为不显示选定项。就好像在TabControl更改选择后,DataContext被切换到TabControl.TabItem.TextBlock。
Bea Stollnitz有一篇关于使用这种诊断技术的好文章。 "How can I debug WPF bindings?" |
|
|
4
0
根据hughdbrown的回答,我发现 this post on MSDN 这将您的问题描述为bug。您可以使用这个XAML复制它(它与您的XAML有相反的问题):
正如您所看到的,长度绑定工作正常,除了在下拉列表中,在下拉列表中,它将离开TabItem而不是内部的字符串。 我不确定它是否适合您的目的,但您可以通过稍微不那么优雅并在ComboBoxItems中复制标题来绕过它:
|