0

这是我的 XAML:

<Window x:Class="Test.MainWindow"....
    DataContext="{Binding RelativeSource={RelativeSource Self}}"...>
    <Window.Resources>
        <ResourceDictionary>
            <ControlTemplate x:Key="lvTemplate" TargetType="{x:Type ListView}">
                <ListView Width="200" ItemsSource="{TemplateBinding ItemsSource}">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Width="140" Header="Name"
                                  DisplayMemberBinding="{Binding name}"  />
                        </GridView>
                    </ListView.View>
                </ListView>
            </ControlTemplate>
        </ResourceDictionary>
    </Window.Resources>

    <Grid>
        <ListView x:Name="lview" Template="{StaticResource lvTemplate }" 
                  ItemsSource="{Binding collection}".../>

        <ListView x:Name="lview2" ItemsSource="{Binding collection2}"...>
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="140" Header="Name"
                            DisplayMemberBinding="{Binding name}"  />
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>

所以,两个 ListView,它们之间的唯一区别是第一个是使用模板创建的。

如果我将元素添加到集合中,新行会出现在两个列表中,并且一切看起来都很好。但是当我在第一个 ListView (lview) 中选择一行时,没有选择任何项目(仅在视觉上它看起来被选中,在 SelectedIndex == -1,SelectedItem == null 后面的代码中)。还有一件奇怪的事,这个 ListView 的 View 属性为 null。这里有什么问题?

提前谢谢你!

4

1 回答 1

1

如果您想在更多人之间共享视图,则ListView可以使用以下方法创建GridView资源x:Shared="False"

<GridView x:Key="gridView" x:Shared="False">
   <GridViewColumn Width="140" Header="Name" DisplayMemberBinding="{Binding name}"  />
</GridView>

然后你可以使用它,如下所示,不止一个ListView

<ListView x:Name="lview" ItemsSource="{Binding collection}" View="{StaticResource gridView}"/>
<ListView x:Name="lview2" ItemsSource="{Binding collection2}" View="{StaticResource gridView}"/>
于 2013-08-25T11:44:13.563 回答