你的位置:首页 > ASP.net教程

[ASP.net教程]WPF:在DataTemplate中使用DataType


DataTemplate中的DataType的功能实际上和Style中的TargetType很类似。

在Style中,使用了TargetType之后,如果不定义Style的Key,那么这个Style将会影响到它所在区域的所有TargetType控件的样式。

同理,在DataTemplate中,使用了DataType之后,如果不定义DataTemplate的Key,那么这个DataTemplate将应用于它所在区域,所有的以这个DataType为数据源的控件。

我写了一个小例子来展示这个效果。

定义Model,Person:

  public class Person  {    public string Name    {      get;      set;    }    public int Age    {      get;      set;    }  }

定义ViewModel:

  public class MainViewModel  {    public ObservableCollection<Person> AllPerson    {      get;      set;    }    public MainViewModel()    {      AllPerson = new ObservableCollection<Person>      {        new Person        {          Name = "张三",          Age = 18        },        new Person        {          Name = "李四",          Age = 28        }      };    }  }

定义DataTemplate,使用了DataType:

  <Window.Resources>    <DataTemplate DataType="{x:Type local:Person}">      <StackPanel Orientation="Horizontal">        <TextBlock Text="{Binding Name}" />        <TextBlock Text="{Binding Age}" />      </StackPanel>    </DataTemplate>  </Window.Resources>

ItemControl的ItemTemplate使用上面定义的DataTemplate:

    <ItemsControl ItemsSource="{Binding AllPerson}">      <ItemsControl.ItemsPanel>        <ItemsPanelTemplate>          <StackPanel Orientation="Vertical" />        </ItemsPanelTemplate>      </ItemsControl.ItemsPanel>    </ItemsControl>

由于ItemControl的Item的数据源为Person,且存在具有Person为DataType的DataTemplate,所以ItemControl的ItemTemplate会自动应用上面定义的DataTemplate。

运行效果如下: