为什么要在ListView中使用DataTemplate?

时间:2015-03-05 19:12:16

标签: c# wpf xaml windows-phone-8 windows-store-apps

如果我使用,有人可以向我解释一下有什么区别 XAML中DataTemplate内的ListView

我使用ListView来显示ObservableCollection的内容而不使用DataTemplateDataTemplate它看起来完全相同?

为什么我要使用数据模板?我想看一个简单的解释/例子。

2 个答案:

答案 0 :(得分:2)

DataTemplate用于以超出简单文本块的方式显示数据。当然这样做:

<ListView.ItemTemplate>
   <DataTemplate>
     <TextBlock Text="{Binding Name}"/>
   </DataTemplate>
</ListView.ItemTemplate>

不会给你买太多东西。但它允许你做这样的事情:

<ListView.ItemTemplate>
   <DataTemplate>
     <StackPanel>
        <Image Source="{Binding ImagePath}"/>
        <TextBlock Text="{Caption}"/>
     </StackPanel>
   </DataTemplate>
</ListView.ItemTemplate>

哪个很酷!你可以在模板中放置任何,这样就可以使ItemsControl(及其衍生物)成为WPF中最强大的类。

答案 1 :(得分:-1)

请在此处查看#HighCore的答案WPF MVVM Why use ContentControl + DataTemplate Views rather than straight XAML Window Views?

 <Window x:Class="MyViews.MainWindow"   
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml
    xmlns:viewmodel="clr-namespace:Project.ViewModel" 
    DataContext="{Binding Main, Source={StaticResource Locator}}"
    Title="{Binding Title, Mode=TwoWay}"  Height="{Binding Height, Mode=TwoWay}" Width="{Binding Width, Mode=TwoWay}" Left="{Binding Left, Mode=TwoWay}" Top="{Binding Top, Mode=TwoWay}" WindowStartupLocation="CenterScreen">


<Window.Resources>     
    <HierarchicalDataTemplate DataType="{x:Type viewmodel:OtherViewModel1}">            
        <ContentPresenter Content="{Binding Path=Text}" />
    </HierarchicalDataTemplate>
    <DataTemplate DataType="{x:Type viewmodel:OtherViewModel2}">
        <view:ConnectivityLED />
    </DataTemplate>      
</Window.Resources>

所以你可以看到Mainwindow正在与多个viewmodel交谈,Main是它自己的视图模型,它是datacontext,它也引用了otherviewmodel1和otherviewmodel2。希望这有帮助,干杯!