18

我有这个要求,我有一个项目集合(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 />
4

4 回答 4

32

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

{Binding Items[0]}

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

{Binding Items[0].Property}

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

• 可以在应用索引器的属性名称后的方括号内指定属性的索引器。例如,该子句Path=ShoppingCart[0]将绑定设置为与您的属性的内部索引如何处理文字字符串“0”相对应的索引。还支持多个索引器。

于 2013-09-06T14:06:12.973 回答
10

尝试这个

<ContentControl Content="{Binding YourCollection[0]}">
    <ContentControl.ContentTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}"></TextBlock>
        </DataTemplate>
    </ContentControl.ContentTemplate>
</ContentControl>
于 2013-09-06T14:04:52.750 回答
3

好的,聚会迟到了,但我想无论如何我都会分享我的 2 美分:我最好使用更笨的 (XAML-) 视图和更接近您的演示需求的视图模型。

翻译:我建议不要将现有的视图模型(或原始数据)及其项目集合直接映射到视图,而是将其映射到适当的视图模型,以显示YourItemViewModel FirstItem属性和bool HasMore属性之类的东西。第二个视图模型很容易进行单元测试,以确保它的行为正确,并且可以很容易地映射到逻辑较少的视图,从而避免视图中可能出现的难以测试的问题。

于 2016-06-27T14:58:56.900 回答
0
  1. {绑定项[0].SomeProperty}
  2. {绑定 [0].SomeProperty}
  3. {Path=/SomeProperty}
于 2021-12-23T11:56:30.270 回答