WPF MVVM示例自定义模板数据绑定
在触摸屏设备上、由于列表是的信息展示不是非常直观和便捷操作。
所以也就出现了很多用面板控件:类似win10的Metro风格, 所以抽空做了一个WPF面板控件。
话不多上 , 先上一个示例图。

为了便于阅读、于是做了一个简单版本, 提供源代码各位可以下载, 该示例中、用的是GalaSoft Mvvm。不了解的朋友Google一下。
新建一个WPF工程添加一个自定义控件、名称自定义, 一下所有UserControl实现代码:
<UserControl.Resources>
<Style x:Key="TextBlockStyle" TargetType="{x:Type TextBlock}">
<Setter Property="TextWrapping" Value="NoWrap"/>
<Setter Property="TextTrimming" Value="None"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="FontSize" Value=""/>
<Setter Property="Margin" Value="10 8 5 0"/>
<Setter Property="Foreground" Value="#616161"/>
</Style>
</UserControl.Resources>
<Grid>
<ItemsControl ItemsSource="{Binding DoginfoModelList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns=""></UniformGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate>
<DataTemplate>
<Border CornerRadius="" Background="White" Margin="">
<StackPanel Background="White" Margin="">
<Border Height="">
<Grid>
<Grid.Background>
<ImageBrush ImageSource="Images/Logo.jpg" Stretch="Uniform"/>
</Grid.Background>
</Grid>
</Border>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<TextBlock FontSize="" FontWeight="Bold" VerticalAlignment="Center" Text="{Binding Info}"></TextBlock>
<Border Background="Red" Width="" Height="" VerticalAlignment="Center" Margin="3 0 0 0" CornerRadius="">
<TextBlock Text="{Binding TypeName}" FontSize="" Foreground="White" HorizontalAlignment="Center"/>
</Border>
</StackPanel> <Grid>
<TextBlock Style="{DynamicResource TextBlockStyle}" Text="{Binding Code}"></TextBlock>
<TextBlock Style="{DynamicResource TextBlockStyle}" HorizontalAlignment="Right" Text="{Binding BedNumber}"></TextBlock>
</Grid> <TextBlock Style="{DynamicResource TextBlockStyle}" Text="{Binding Doctor}"></TextBlock>
<TextBlock Style="{DynamicResource TextBlockStyle}" Text="{Binding Day}"></TextBlock>
<TextBlock Style="{DynamicResource TextBlockStyle}" Text="{Binding Time}"></TextBlock>
</StackPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
用于后台绑定的数据模板的实体类代码:
public class DogInfo : ViewModelBase
{ #region private
private string info;
private string typeName;
private string code;
private string bedNumber;
private string doctor;
private string day;
private string time;
#endregion /// <summary>
/// 主要信息
/// </summary>
public string Info
{
get { return info; }
set { info = value; RaisePropertyChanged(); }
} /// <summary>
/// 显示内容
/// </summary>
public string TypeName
{
get { return typeName; }
set { typeName = value; RaisePropertyChanged(); }
} /// <summary>
/// 编号
/// </summary>
public string Code
{
get { return code; }
set { code = value; RaisePropertyChanged(); }
} /// <summary>
/// 床号
/// </summary>
public string BedNumber
{
get { return bedNumber; }
set { bedNumber = value; RaisePropertyChanged(); }
} /// <summary>
/// 医师
/// </summary>
public string Doctor
{
get { return doctor; }
set { doctor = value; RaisePropertyChanged(); }
} /// <summary>
/// 住院天数
/// </summary>
public string Day
{
get { return day; }
set { day = value; RaisePropertyChanged(); }
} /// <summary>
/// 住院时间
/// </summary>
public string Time
{
get { return time; }
set { time = value; RaisePropertyChanged(); }
} }
后台View 实现代码:
public class MainViewModel : ViewModelBase
{
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel()
{
DoginfoModelList = new ObservableCollection<DogInfo>();
InitLoadPageList();
} private void InitLoadPageList()
{
for (int i = ; i < ; i++)
{
DoginfoModelList.Add(new DogInfo()
{
Info = "小贱贱 男 3岁",
TypeName = "急诊",
Code = "狗狗编号:L0317",
BedNumber = "床号:01",
Doctor = "主治医师:贾静",
Day = "住院编号:37天",
Time = "住院时间:" + DateTime.Now.ToString("yyyy-MM-dd")
});
}
} private ObservableCollection<DogInfo> doginfoModelList; /// <summary>
/// 狗狗信息列表
/// </summary>
public ObservableCollection<DogInfo> DoginfoModelList
{
get { return doginfoModelList; }
set
{
doginfoModelList = value;
RaisePropertyChanged();
}
}
}
最后, 在首页添加用户控件、在加载时给主窗体进行DataContext绑定代码:
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
MainViewModel vm;
public MainWindow()
{
InitializeComponent();
vm = new MainViewModel();
this.DataContext = vm;
} }
最后的局部显示效果图如下:

PS: 喜欢的文章点个赞吧, 另外源代码链接:点我下载
WPF MVVM示例自定义模板数据绑定的更多相关文章
- WPF MVVM 之理解(数据绑定)
(申明:最近在做一个练习,写点东西,谨供参考.) 1.界面展示:其中的布局和样式就不说了,重点在MVVM架构和数据绑定(Model层使用EF(Entity Framework)实体框架,不做介绍). ...
- WPF Step By Step 自定义模板
WPF Step By Step 自定义模板 回顾 上一篇,我们简单介绍了几个基本的控件,本节我们将讲解每个控件的样式的自定义和数据模板的自定义,我们会结合项目中的具体的要求和场景来分析,给出我们实现 ...
- (ZZ)WPF经典编程模式-MVVM示例讲解
http://www.cnblogs.com/xjxz/archive/2012/11/14/WPF.html 本篇从两个方面来讨论MVVM模式: MVVM理论知识 MVVM示例讲解 一,MVVM理论 ...
- WPF MVVM从入门到精通3:数据绑定
原文:WPF MVVM从入门到精通3:数据绑定 WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录窗口 WPF MVVM从入门到精通3:数据绑定 WPF ...
- WPF MVVM+EF增删改查 简单示例(二) 1对1 映射
WPF MVVM+EF增删改查 简单示例(一)实现了对学生信息的管理. 现在需求发生变更,在录入学生资料的时候同时需要录入学生的图片信息,并且一名学生只能有一张图片资料.并可对学生的图片资料进行更新. ...
- 数字IC设计入门必备——VIM自定义模板调用与VCS基本仿真操作示例
一.前言 毕业论文答辩结束,闲下来写篇文章.芯片研发人员都在Linux系统下借助各种EDA工具和代码语言完成工作,因此提高代码开发效率,熟练运用开发工具是十分必要的.本文讲述VIM编辑神器的veril ...
- WPF MVVM模式的一些理解
/*本文转自 http://www.cnblogs.com/sirkevin/archive/2012/11/28/2793471.html */ 使用WPF+Mvvm开发一年多,期间由于对Mvvm模 ...
- WPF/MVVM Quick Start Tutorial - WPF/MVVM 快速入门教程 -原文,翻译及一点自己的补充
转载自 https://www.codeproject.com/articles/165368/wpf-mvvm-quick-start-tutorial WPF/MVVM Quick Start T ...
- WPF自学入门(十)WPF MVVM简单介绍
前面文章中,我们已经知道,WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时,WPF会自动发出通知去更新UI. 我们不管 ...
随机推荐
- python之文件操作-复制、剪切、删除等
以下是把sourceDir目录下的以.JPG结尾的文件所有拷贝到targetDir目录下: <span style="font-size:18px;">>> ...
- vim插件之delimitMate.vim
delimitMate.vim--这个插件主要是在插入模式下,用来自动补全括号.引号等 下载地址 http://www.vim.org/scripts/script.php?script_id=275 ...
- HIVE JOIN_1
HIVE JOIN 概述 Hive join的实现包含了: Common (Reduce-side) Join Broadcast (Map-side) Join Bucket Map Join So ...
- C# Cache的类方法
public class DataCache { /// <summary> /// 获取当前应用程序指定CacheKey的Cache值 / ...
- Atcoder Grand Contest 107 A Biscuits
A - Biscuits Time limit : 2sec / Memory limit : 256MB Score : 200 points Problem Statement There are ...
- box-shadow制作各种单边,多边阴影
一.box-shadow问题探究 box-shadow 在MDN定义以及详解: box-shadow 以由逗号分隔的列表来描述一个或多个阴影效果.该属性让你可以对几乎所有元素的边框产生阴影.如果元素同 ...
- react基础用法二(组件渲染)
react基础用法二(组件渲染) 如图所示组件可以是函数 格式:function 方法名(){ return <标签>内容</标签>} 渲染格式: <方法名 /> ...
- 关于命令行签名时.SF和.RSA文件的命名问题
准备工作: 签名文件名称为android.keystore 签名的别名为123456789.keystore 1.使用签名命令后例如以下图 发现.SF和.RSA文件自己主动命名为12345678.SF ...
- 位运算(&、|、^)与逻辑运算(&&、 ||)差别
刚无意在一篇文章中看到了位运算(&.|)和逻辑运算(&&.||)的介绍.想起了自己薄弱的基础知识.于是百度了几把总结了下. 首先从概念上区分下,位运算是将运算符两边的数字换算成 ...
- Flat UI简介
Flat UI简介 一.简介 Flat UI是基于Bootstrap之上进行二次开发的扁平化前端框架,他提供了动感.时尚的风格色调搭配,简洁.炫丽的功能组件,同时还提供了更为平滑的js交互动画,可以称 ...