在资源文件中定义列表视图,仅更改 ItemSource
Define listview in resource file with only ItemSource changing
我创建了以下 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 headers 以及名称和地址文本块。
制作 ControlTemplate 似乎不是正确的事情,因为我也在列表视图中指定实际数据(例如绑定到名称和地址)。
是否有更好的方法来创建某种类型的资源以便我可以重用它?
在资源字典中定义页眉模板和项目模板,并在您的代码中添加对它们的引用。您可以重复使用此模板。
<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
我创建了以下 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 headers 以及名称和地址文本块。
制作 ControlTemplate 似乎不是正确的事情,因为我也在列表视图中指定实际数据(例如绑定到名称和地址)。
是否有更好的方法来创建某种类型的资源以便我可以重用它?
在资源字典中定义页眉模板和项目模板,并在您的代码中添加对它们的引用。您可以重复使用此模板。
<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