在资源文件中定义listview,只更改ItemSource

时间:2017-07-04 03:35:21

标签: xaml uwp uwp-xaml

我创建了以下ListView来显示一些数据(删除了无关的标记):

<ListView ItemsSource="{Binding NewYorkResidents}">
    <ListView.Header>
        <Style>
            <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
        </Style>
    </ListView.Header>
    <ListView.HeaderTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="60"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <TextBlock Text="Name" Grid.Column="0" />
                <TextBlock Text="Address" Grid.Column="1" />
            </Grid>
        </DataTemplate>
    </ListView.HeaderTemplate>
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="60"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding Name}" Grid.Column="0" />
                <TextBlock Text="{Binding Address}" Grid.Column="1" />
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

现在我想在不同的视图中重用这个完全相同的ListView +标记,只是使用不同的ItemsSource(尽管它将绑定到相同的数据类型)。

重用ListView并指定ItemsSource的最佳方法是什么?我希望能够做到这样的事情:

<ListView DataTemplate="MyTemplate" ItemsSource=<some new binding> />

并且仍然使用ItemsSource中的数据显示ListView标题以及名称和地址TextBlocks。

制作ControlTemplate似乎不是正确的事情,因为我也在列表视图中指定实际数据(例如绑定到名称和地址)。

有没有更好的方法来创建某种类型的资源,以便我可以重用它?

1 个答案:

答案 0 :(得分:0)

在资源字典中定义标题模板和项目模板,并在代码中添加它们的引用。您可以重复使用此模板。

   <DataTemplate x:Key="HeaderTemplate1">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="60"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="Name" Grid.Column="0" />
            <TextBlock Text="Address" Grid.Column="1" />
        </Grid>
    </DataTemplate>

    <DataTemplate x:Key="ListViewTemplate1">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="60"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="{Binding Name}" Grid.Column="0" />
            <TextBlock Text="{Binding clothing1}" Grid.Column="1" />
        </Grid>
    </DataTemplate>

  <ListView HeaderTemplate="{StaticResource HeaderTemplate1}" ItemTemplate="{StaticResource ListViewTemplate1}"/>

有关项目模板的更多信息: https://docs.microsoft.com/en-us/windows/uwp/controls-and-patterns/listview-item-templates