目的:将类里的数据显示到类似Listbox的列表控件,而且样式要自定义。
一、不使用DataTemplate直接绑定List集合数据源
集合数据类型如图:
数据类型
实现MVVM分离、集合初始化、及数据绑定
启动效果如下:
无Datatemplate及重写ToString
重写ToString后:
重写ToString
二、使用DataTamplate
1 、实现单数据类型数据模板:
在资源字典里编写数据模板
Card类型数据模板
<DataTemplate DataType="{x:Type m:Card}">
<Border
x:Name="border"
Padding="5"
BorderBrush="Gray"
BorderThickness="1"
CornerRadius="5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock
x:Name="txtName"
VerticalAlignment="Center"
FontSize="18"
FontWeight="Black"
Text="{Binding Name}" />
<StackPanel Grid.Column="1">
<TextBlock Text="{Binding MPValue}" />
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding PriorityValue}" />
<TextBlock Text="{Binding Skill_Description}" />
<TextBlock Text="{Binding V_Condition}" />
</StackPanel>
</Grid>
</Border>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding MPValue}" Value="ZERO">
<Setter TargetName="txtName" Property="Foreground" Value="LightBlue" />
</DataTrigger>
<DataTrigger Binding="{Binding MPValue}" Value="-1">
<Setter TargetName="txtName" Property="Foreground" Value="LightGreen" />
</DataTrigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="border" Property="BorderBrush" Value="yellow" />
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
App.xaml引用:
全局引用
效果图:
集合内容按数据模板显示
2、 实现多种数据类型模板:
感觉数据模板最重要的用法就在于可以在同一个列表控件中,根据数据类型的不同来展示不同的数据模板。
例如我们建立两个类Student、Teacher都继承于抽象类Person。
初始化数据源、绑定并运行:
就会看到自动将抽象类拆箱了。 (暂时不知道原因)
这样就说明这列表控件可以装载不同的数据类型及展示不同的数据模板。
实现Student和Teacher的数据模板:
默认状态:
默认状态
鼠标悬停状态:
Teacher悬停状态
Student悬停状态
3、 任何控件数据模板:
既然是数据模板,只跟数据有关。那就是任何能装下此数据的都能使用到此数据的模板。**
**
如button,button的content属性为object类型能装任何类型数据。