如何将不同的DataTemplate应用于Listview

时间:2016-05-09 10:42:53

标签: c# xaml win-universal-app

在我的UWP应用程序中,我有一个场景,其中有多个页面,它们构成ListView以显示数据,并且每个页面都有自己的DataTemplate基于要显示的内容,现在ListView和DataTemplate的样式/颜色每个页面都是一样的,所以问题是每当我需要更改DataTemplate中的任何样式时,比如设置边框我需要在每个页面上执行此操作,那么如何为数据模板创建一个通用的UI,但是使用不同的数据显示并将其分配给ListView,我尝试使用listview创建UserControl,但我不知道如何将Datatemplate传递给该列表视图。

这是我在第一级尝试的内容:

为DataTemplate创建用户控件和依赖项属性: UserControl CS文件:

  public DataTemplate DisplayItemTemplate
    {
        get { return (DataTemplate)GetValue(DisplayItemTemplateProperty); }
        set { SetValue(DisplayItemTemplateProperty, value); }
    }

    public static readonly DependencyProperty DisplayItemTemplateProperty =
            DependencyProperty.Register("DisplayItemTemplate", typeof(DataTemplate), typeof(ListViewControl), new PropertyMetadata(null));

UserControl Xaml文件:

 <ListView x:Name="DisplayListView"
                      IsItemClickEnabled="True"
                      ItemsSource="{Binding}"
                      ItemTemplate="{Binding DisplayItemTemplate, Mode=OneWay}"
                      ItemContainerStyle="{StaticResourceListViewItemExpandedStyle}"
                      ItemClick="DisplayListView_ItemClick">

PeoplePage,我正在使用此UserControl:

  <controls:ListViewControl x:Name="MyListView"
                              Grid.Row="1"
                              DisplayItemTemplate="{StaticResource MyListDataTemplate}" />

问题是MyListDataTemplate未在DisplayListView中设置为DataTemplate。

1 个答案:

答案 0 :(得分:1)

<UserControl x:Name="userControl"> 
...
<ListView x:Name="DisplayListView"
                      IsItemClickEnabled="True"
                      ItemsSource="{Binding}"
                      ItemTemplate="{Binding DisplayItemTemplate,ElementName=userControl,Mode=OneWay}"
                      ItemContainerStyle="{StaticResourceListViewItemExpandedStyle}"
                      ItemClick="DisplayListView_ItemClick">
...
</UserControl>