UWP中的数据绑定到嵌套集合

时间:2016-09-12 13:59:24

标签: c# uwp uwp-xaml

我需要深入研究UWP中的嵌套可观察集合,其中包含另一个可观察的集合,然后将其绑定到我的XAML。

我怎么能这样做?

3 个答案:

答案 0 :(得分:3)

Allen Rufolo的解决方案有效。但这是接近这个的另一种方式。

x:Bind是新实施的,可用于UWP。我的答案基于x:Bind

示例类

public class MainItems
{
    public string ItemName { get; set; }
    public ObservableCollection<SubItems> SubItemsList { get; set; }
}

public class SubItems
{
    public string SubItemName { get; set; }
}

示例数据

ObservableCollection<MainItems> _data = new ObservableCollection<MainItems>();
for (int i = 1; i <= 5; i++)
{
    MainItems _mainItems = new MainItems();
    _mainItems.ItemName = "Main" + i.ToString();
    _mainItems.SubItemsList = new ObservableCollection<SubItems>();
    for (int j = 1; j <= 3; j++)
    {
        SubItems _subItems = new SubItems()
        {
            SubItemName = "SubItem" + i.ToString()
        };
        _mainItems.SubItemsList.Add(_subItems);
    }
    _data.Add(_mainItems);
}

我的XAML

<ListView x:Name="MyMainList">
    <ListView.ItemTemplate>
        <DataTemplate x:DataType="local:MainItems">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <TextBlock Text="{x:Bind ItemName}" />
                <ListView ItemsSource="{x:Bind SubItemsList}" Grid.Row="1">
                    <ListView.ItemTemplate>
                        <DataTemplate x:DataType="local:SubItems">
                            <TextBlock Foreground="Red" Text="{x:Bind SubItemName}"/>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

x:Bind 为您提供了一种绑定嵌套Observable集合的简便方法

<强>输出

enter image description here

答案 1 :(得分:2)

您的可观察集合的代码示例会有所帮助,但您可以做这样的事情......

public class MyViewModel
{
    public ObservableCollection<MyObject> MyObjectCollection { get; set;}
}

public class MyObject
{
    public string ObjectName {get; set;}
    public ObservableCollection<AnotherObject> AnotherObjectCollection { get; set; }
}

在您的XAML中,您可以绑定到与此

类似的这些集合
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <ListView x:Name="ListView1" Grid.Column="0" 
              ItemsSource="{Binding MyObjectCollection}">
        <ListView.ItemTemplate>
            <Datatemplate>
                <TextBlock Text="{Binding ObjectName}"/>
            </Datatemplate
        </ListView.ItemTemplate>
    </ListView>
    <Grid Grid.Column=1 DataContext="{Binding ElementName=ListView1, Path=SelectedItem}"> 
        <ListView ItemsSource="{Binding AnotherObjectCollection}"/>
    </Grid>
</Grid>

在此示例中,第二个Grid的DataContext绑定到ListView1中的选定项。

答案 2 :(得分:1)