我有这样一个需求,我有一组物品(ObservableCollection),但我只想显示第一个物品。这个要求来自于大多数情况下,该集合只包含一个物品。由于空间限制,即使集合中有多个物品,我们也希望显示物品的数量、第一个物品的详细信息(与先前情况相同的呈现方式)和一个 ...
符号,提示用户还有更多的物品。当鼠标悬停在 UI 元素上时,弹出窗口最终会显示所有的物品。
我能想到的第一个解决方案(如果有更好的建议,请指出)是绑定到这个集合(但不使用 ItemsControl
),并定义一个DataTemplateSelector
派生类(根据集合中的项目数返回要显示的 DataTemplate
,如只有一个物品则返回只显示这个物品的模板,否则返回带有 ...
和用于显示更多细节的弹出窗口的模板),然后将其用作 ContentTemplateSelector
。
但我的问题是:我的两个 DataTemplate
在 XAML 中应该是什么样子,以便它们可以只显示集合中的第一个物品?显然,我不能使用 ItemsControl
。
更新:
现在我已经成功解决了这个问题,并同意关闭此问题(由于已经有一些答案,我无法删除它)。
我实际上知道如何绑定到集合中的一个特定项,但这不是我困惑的地方。我觉得我应该像一个答案建议的那样使用 ContentControl
。但我认为,由于我需要绑定到整个集合(而不是单个索引项),并使用 DataTemplateSelector
来选择正确的 DataTemplate
,代码看起来会像这样:
<ContentControl Content="{Binding MyCollection}"
ContentTemplateSelector="{StaticResource MyTemplateSelector}" />
在MyTemplateSelector
中,我不确定如何使用它,因为没有引用到我的集合,因为它被定义为资源,并且它没有MyCollection
的信息。 不过,事实证明非常简单,DataTemplate
可以引用索引项,而无需知道名称或任何其他引用。 就像这样:
<DataTemplate>
<TextBlock Text="{Binding [0].PropertyName}" />
<DataTemplate />