我很难用一个简单的文本框来显示我想要的东西。 基本上我有一个来自这个数据文件xml的分组列表框:
<Hosts>
<Host foo="aaa">
<usable>1</usable>
</Host>
<Host foo="bbb">
<usable>1</usable>
</Host>
</Hosts>
我有以下代码:
<CollectionViewSource x:Key="cvs"
Source="{Binding Source={StaticResource HostsData}}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="@foo" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
<DataTemplate x:Key="categoryTemplate">
<TextBlock Text="test"
FontWeight="Bold"
Background="Gold"
Margin="0,5,0,0" />
</DataTemplate>
...
<ListBox Name="myList"
Grid.Row="0"
Grid.Column="1"
TextBlock.FontSize="9"
Margin="2"
ItemsSource="{Binding Source={StaticResource cvs}}"
ItemTemplate="{StaticResource MachinesTemplate}">
<ListBox.GroupStyle>
<GroupStyle HeaderTemplate="{StaticResource categoryTemplate}" />
</ListBox.GroupStyle>
</ListBox>
所以我有我的分组列表框,但是testbox内容为空。它是“黄金”,如果我设置Text =“test”它会按照预期加粗,但是我无法显示“ foo ”内容(aaa,bbb)。
到目前为止,我已经尝试过各种绑定但没有成功。
答案 0 :(得分:0)
要获取匹配属性的文本,您需要绑定到GroupStyle HeaderTemplate中的Name属性:
<TextBlock Text="{Binding Path=Name}" ... />
到此为止,假设您的所有XPath都正常工作,这是另外一组问题。这是一个完整的简化示例,其中包含代码中的相关部分:
<Grid>
<Grid.Resources>
<XmlDataProvider x:Key="HostsData"
XPath="//Host">
<x:XData>
<Hosts xmlns="">
<Host foo="aaa">
<usable>1</usable>
</Host>
<Host foo="bbb">
<usable>1</usable>
</Host>
</Hosts>
</x:XData>
</XmlDataProvider>
<CollectionViewSource x:Key="cvs"
Source="{Binding Source={StaticResource HostsData}}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="@foo" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
<DataTemplate x:Key="categoryTemplate">
<TextBlock Text="{Binding Path=Name}"
FontWeight="Bold"
Background="Gold"
Margin="0,5,0,0" />
</DataTemplate>
</Grid.Resources>
<ListBox Name="myList"
ItemsSource="{Binding Source={StaticResource cvs}}">
<ListBox.GroupStyle>
<GroupStyle HeaderTemplate="{StaticResource categoryTemplate}" />
</ListBox.GroupStyle>
</ListBox>
</Grid>