ListView DynamicResource

时间:2011-02-08 12:45:28

标签: wpf vb.net .net-3.5 dynamicresource

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

  

窗口必须是树的根。   无法添加Window作为孩子   视觉。

如果我要删除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中的某个地方定义资源?

如果有任何我未提及的内容,请告诉我。

感谢您的协助,

马特

1 个答案:

答案 0 :(得分: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必须是您窗口代码隐藏的公共财产。