2017-07-04 43 views
0

我创建了下面的ListView显示一些数据(除去多余的标记):定义列表视图中的资源文件,其中仅有的ItemSource变化

<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

您可以使用控件模板对于这种情况,结合你可以使用TemplateBinding或的RelativeSource。 https://stackoverflow.com/q/1131222/2745294 –

回答

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

相关问题