如何绑定父列表中的值?

时间:2017-08-24 20:11:46

标签: wpf data-binding

我有一个通过我的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,但无法正常使用。

1 个答案:

答案 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。我认为这不是你的确切代码所以它不重要。