0

当尝试将 DynamicResource 用作 ListView 的 ItemsSource 时,我的应用程序正在输出错误:

窗口必须是树的根。无法将 Window 添加为 Visual 的子项。

如果我要删除 ItemsSource 并单独保留代码,那么我不会收到错误消息,并且会显示一个空的 ListView。

我的 Window.XAML 中的 ListView 如下:

<ListView Grid.Column="1" Grid.Row="8" Grid.RowSpan="4" ItemsSource="{DynamicResource tasksResponsibilitiesCollection}">
                        <ListView.View>
                            <GridView AllowsColumnReorder="True">
                                <GridViewColumn DisplayMemberBinding="{Binding tasksResponsibilitiesName}" Header="Tasks/Responsibility" Width="150" />
                                <GridViewColumn Header="Member Responsible" Width="120" />
                                <GridViewColumn Header="Qualifications" Width="110" />
                            </GridView>
                        </ListView.View>
                    </ListView>

ItemsSource 是在代码隐藏中定义的 ObservableCollection。我一直在使用 MSDN 示例 (http://msdn.microsoft.com/en-us/library/ms747048.aspx) 作为创建 ListView 的指南

如何将 ObservableCollection 出价到 ListView?我是否必须在某处定义 Window.XAML 中的资源?

如果有什么我没有涵盖的,请告诉我。

感谢您的帮助,

马特

4

1 回答 1

1

如果您ObservableCollection在窗口的代码隐藏中被定义为属性,那么您可以使用数据绑定来设置ItemsSource,如下所示:

<ListView Grid.Column="1" Grid.Row="8" Grid.RowSpan="4" ItemsSource="{Binding Path=tasksResponsibilitiesCollection, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}">
    <ListView.View>
        <GridView AllowsColumnReorder="True">
            <GridViewColumn DisplayMemberBinding="{Binding tasksResponsibilitiesName}" Header="Tasks/Responsibility" Width="150" />
            <GridViewColumn Header="Member Responsible" Width="120" />
            <GridViewColumn Header="Qualifications" Width="110" />
        </GridView>
    </ListView.View>
</ListView>

请注意,它tasksResponsibilitiesCollection必须是您窗口代码隐藏中的公共属性。

于 2011-02-08T13:10:31.827 回答