我有这个要求,我有一个项目集合(ObservableCollection),但我只想显示第一个项目。要求来自这样一个事实,即在大多数情况下,集合仅包含一项。并且由于篇幅限制,即使集合中有多个项目,我们希望显示项目的数量、第一个的详细信息(与之前的情况相同)和一个...
符号来指示用户说有更多的项目。当鼠标悬停在 UI 元素上时,弹出窗口最终会显示所有项目。
我能想到的第一个解决方案(如果他们更好,请建议其他人)是绑定到这个集合(但不使用 an ItemsControl
)并定义一个DataTemplateSelector
派生类(它返回要么DataTemplate
显示唯一的一个项目,DateTemplate
要么返回...
以及更多详细信息的弹出窗口,基于集合中的项目数)并将其用作ContentTemplateSelector
.
但现在我的问题是:DataTemplate
我俩在 XAML 中的外观如何,以便它们只能显示集合中的第一项?显然我不能拥有一个ItemsControl
.
更新:
现在我已经设法让它工作并同意这个问题可以关闭(我不能再删除它,因为已经有一些答案)。
我实际上知道如何绑定到集合中的某个项目,但这不是我感到困惑的地方。我觉得我应该ContentControl
按照一个答案的建议使用。但我想既然我需要绑定到整个集合(而不是单个索引项),并使用 a根据集合中的项目数DataTemplateSelector
选择正确DataTemplate
的。代码如下所示:
<ContentControl Content="{Binding MyCollection}"
ContentTemplateSelector="{StaticResource MyTemplateSelector}" />
而且MyTemplateSelector
我不确定如何使用它,因为没有引用我的集合,因为它被定义为资源并且它没有MyCollection
. 然而,事实证明它非常简单,DataTemplate
可以在不知道名称或任何其他引用的情况下引用索引项。就像这样:
<DataTemplate>
<TextBlock Text="{Binding [0].PropertyName}" />
<DataTemplate />