我创建了以下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似乎不是正确的事情,因为我也在列表视图中指定实际数据(例如绑定到名称和地址)。
有没有更好的方法来创建某种类型的资源,以便我可以重用它?
答案 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