UWP如何在App.XAML中定义DataTemplate

时间:2016-03-05 07:49:38

标签: win-universal-app

我想在App.XAML中定义Datatemplate,然后为我需要使用此itemtemplate的任何页面共享它。我不知道怎么做

1 个答案:

答案 0 :(得分:14)

这取决于您要使用的绑定类型。

如果您使用标准XAML绑定,则一切都与WPF中的相同:

  1. Application.Resources中定义模板:

    <Application.Resources>
        <DataTemplate x:Key="Template1">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Prop1}" />
                <TextBox Text="{Binding Prop2}" />
            </StackPanel>
        </DataTemplate>
    </Application.Resources>
    
  2. 在页面中引用模板:

    <ListView ItemsSource="{Binding Items}" ItemTemplate="{StaticResource Template1}" />
    
  3. 如果您正在使用编译{x:bind}绑定,则需要在单独的资源字典中定义模板,其中代码将落后于生成的代码将会结束:

    1. 为资源字典创建一个新的分部类:

      public partial class DataTemplates
      {
          public DataTemplates()
          {
              InitializeComponent();
          }
      }
      
    2. 使用数据模板基于此分部类创建资源字典:

      <ResourceDictionary
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:local="using:MyNamespace"
          x:Class="MyNamespace.DataTemplates">
      
          <DataTemplate x:Key="Template2" x:DataType="local:MyClass">
              <StackPanel Orientation="Horizontal">
                  <TextBlock Text="{x:Bind Prop1}" />
                  <TextBox Text="{x:Bind Prop2}" />
              </StackPanel>
          </DataTemplate>
      </ResourceDictionary>
      
    3. 将资源字典合并到Application.Resources

      <Application.Resources>
          <ResourceDictionary>
              <ResourceDictionary.MergedDictionaries>
                  <local:DataTemplates/>
              </ResourceDictionary.MergedDictionaries>
          </ResourceDictionary>
      </Application.Resources>
      
    4. 最后使用页面中的模板:

      <ListView ItemsSource="{Binding Items}" ItemTemplate="{StaticResource Template2}" />
      
    5. 您可以查看Igor's blog post了解详情。自发布帖子发布以来,没有任何重大变化。