2

这个问题可能很明显,但我很难看到它。

我有以下 XAML:

<ItemsControl x:Name="contentList">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="200" />
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding Name}" TextWrapping="Wrap" />
                    <ItemsControl x:Name="imageContent" Grid.Column="1">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding ImageCollection.FullName}" TextWrapping="Wrap" />
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

我已经为 contentList 设置了 itemsSource,如下所示:

contentList.ItemsSource = myObservableCollection;

但是,当我尝试对 imageContent 执行相同操作时,我似乎无法通过 IntelliSense 访问它。我已经尝试过清理/重建项目,但没有任何区别。

我需要以不同的方式访问 imageContent 吗?

我想对 contentList 和 imageContent 使用 myObservableCollection,因为它具有以下结构:

  • 名称(字符串)
  • 图像集合(可观察集合)

旨在生成以下 UI:

在此处输入图像描述

4

1 回答 1

2

您需要在外部集合的列表对象中定义另一个 ObservableCollection。像这样的东西:

ObservableCollection<MyObject> OuterList = new ObservableCollection<MyObject>();

//...


public class MyObject
{
    public ObservableCollection<FileInfo> ImageCollection {get; set;}
    public MyObject()
    {
        ImageCollection = new ObservableCollection<FileInfo>();
    }
}

然后像这样更新你的xaml:

...
<ItemsControl x:Name="imageContent" ItemsSource="{Binding ImageCollection}">
...

因此,这将导致您的外部列表中的每个项目都保存它自己的可观察集合来保存它的列表。

同样通过此更改确保您更新文本块上的绑定,因为每个项目将代表一个 FileInfo 对象,您可以简单地编写以下代码:

<DataTemplate>
    <TextBlock Text="{Binding FullName}" TextWrapping="Wrap" />
</DataTemplate>
于 2012-10-08T20:37:16.430 回答