WPF:如何只绑定到集合中的一个项目,而不是使用ItemsControl,因为我不想显示所有这些项目

tet*_*ete 14 data-binding wpf xaml datatemplate

我有这个要求,我有一个项目集合(ObservableCollection),但我只想显示第一个项目.要求来自这样的事实:在大多数情况下,集合只包含一个项目.由于空间限制,即使集合中有多个项目,我们也要显示项目的数量,第一个项目的详细信息(与先前情况相同的演示文稿)和一个...符号表示用户有更多的项目.当鼠标悬停在UI元素上时,弹出窗口最终将显示所有项目.

我能想到的第一个解决方案(如果它们更好,请建议别人)是绑定到这个集合(但不使用ItemsControl)并定义DataTemplateSelector派生类(返回DataTemplate显示唯一的一个项目,或者DateTemplate具有...并根据集合中的项目数量弹出更多详细信息并将其用作ContentTemplateSelector.

但现在我的问题是:DataTemplate在XAML 中我的两个样子是什么样的,以便它们只显示集合中的第一个项目?显然我不能拥有ItemsControl.

更新:

现在我已经设法让它工作并同意这个问题可以关闭(我不能删除它,因为已经有一些答案).

我实际上知道如何绑定到集合中的某个项目,但这不是我困惑的地方.我觉得我应该用ContentControl一个答案建议.但我想,因为我需要绑定到整个集合(而不是单个索引项),并使用a 根据集合中的项目数DataTemplateSelector选择适当DataTemplate的.代码如下所示:

<ContentControl Content="{Binding MyCollection}"
          ContentTemplateSelector="{StaticResource MyTemplateSelector}" />
Run Code Online (Sandbox Code Playgroud)

而且MyTemplateSelector我不知道如何使用它,因为没有对我的集合的引用,因为它被定义为资源而且它没有信息MyCollection.然而,事实证明它非常简单,DataTemplate可以在不知道名称或任何其他引用的情况下引用索引项.就像这样:

<DataTemplate>
   <TextBlock Text="{Binding [0].PropertyName}" />
<DataTemplate />
Run Code Online (Sandbox Code Playgroud)

She*_*dan 25

要仅绑定到集合中的一个项目,可以使用以下语法:

{Binding Items[0]}
Run Code Online (Sandbox Code Playgroud)

或者从集合中绑定到单个项的属性:

{Binding Items[0].Property}
Run Code Online (Sandbox Code Playgroud)

您可以从MSDN中的Binding.Path属性页面...链接页面中找到有关属性路径语法的更多信息:

•属性的索引器可以在应用索引器的属性名称后面的方括号内指定.例如,该子句Path=ShoppingCart[0]设置与索引的绑定,该索引对应于属性的内部索引处理文字字符串"0"的方式.还支持多个索引器.


Nit*_*esh 8

试试这个

<ContentControl Content="{Binding YourCollection[0]}">
    <ContentControl.ContentTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}"></TextBlock>
        </DataTemplate>
    </ContentControl.ContentTemplate>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)