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"的方式.还支持多个索引器.
试试这个
<ContentControl Content="{Binding YourCollection[0]}">
<ContentControl.ContentTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"></TextBlock>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32830 次 |
| 最近记录: |