如果我使用,有人可以向我解释一下有什么区别
XAML中DataTemplate
内的ListView
?
我使用ListView
来显示ObservableCollection
的内容而不使用DataTemplate
和DataTemplate
它看起来完全相同?
为什么我要使用数据模板?我想看一个简单的解释/例子。
答案 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。希望这有帮助,干杯!