我有一个通过我的ViewModel公开的属性
public ObservableCollection<Tag> AllTags { get; set; }
其中Tag
是
class Tag {
public string Name { get; set; }
public List<int, int> Values { get; set; }
}
然后我将其用作ItemsSource
的{{1}}:
ListView
在<ListView ItemTemplate="{StaticResource TagListTemplate}" ItemsSource="
{Binding AllTags}">
</ListView>
内
然后我将第二个列表绑定到TagListTemplate
:
ItemsControl
目前输出如下:
<DataTemplate x:Key="TagListTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding TagName}"/>
<ItemsControl Grid.Column="1" ItemsSource="{Binding Values}">
</ItemsControl>
</Grid>
</DataTemplate>
我希望输出看起来像这样:
Name [value, value]
[value, value]
[value, value]
Name2 [value,value]
[value,value]
[value,value]
如何将Name [value, value]
Name [value, value]
Name [value, value]
Name2 [value,value]
Name2 [value,value]
Name2 [value,value]
移动到Textblock
并为每个元素重复名称?
我尝试过使用ItemsControl
,但无法正常使用。
答案 0 :(得分:0)
这样的事情可以解决问题:
<ListView ItemsSource="{Binding AllTags}">
<ListView.ItemTemplate>
<DataTemplate DataType="{x:Type local:Tag}">
<ItemsControl ItemsSource="{Binding Values}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type local:ValuePair}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=DataContext.Name, RelativeSource={RelativeSource AncestorType=ItemsControl}}"/>
<TextBlock Text="{Binding Value1}"/>
<TextBlock Text="{Binding Value2}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
注意这个绑定:
{Binding Path=DataContext.Name, RelativeSource={RelativeSource AncestorType=ItemsControl}}
使用相对绑定时,需要在属性前显式指定DataContext!
注意:我无法使用double int值编译代码,因此我为此创建了一个虚拟类型ValuePair。我认为这不是你的确切代码所以它不重要。