WPF 项目开发入门(一) 安装运行
WPF 项目开发入门(二) WPF 页面布局
WPF 项目开发入门(三)WPF 窗体与页面
WPF 项目开发入门(四) MVVM 模式 与 TreeView树组件
WPF 项目开发入门(五)ListView列表组件 与 Expander组件
WPF 项目开发入门(六)DataGrid组件
WPF 项目开发入门(七) From表单组件
WPF 项目开发入门(八)数据库驱动配置与数据库操作
WPF 项目开发入门(九)数据库连接 NHibernate使用
WPF 项目开发入门(十)DevExpress 插件+NHibernate登录
WPF 项目开发入门(十一)DevExpress 插件 Grid表格应用
WPF 中提供 MVVM 模式。MVVM 模式是实现带有 UI 的应用程序时的一种设计模式。MVVM 模式是 Model-View-ViewModel 模式的缩写。
分三部分实现:模型、视图和视图模型。模型是实现验证数据不一致和与数据库交换数据的过程的部分。视图是实现外观设计的部分。视图模型是保存数据以绘制视图并将输入从视图传递到模型的部分。
在WPF的情况下,XAML文件对应视图,描述绑定路径规范目的地的cs类文件对应视图模型。
1 Binding 绑定
WPF 有一项称为数据绑定的功能。通过Binding属性将cs脚本中的数据与外观设计xaml中的UI组件进行数据关联。
在窗体或者面板类中使用了 DataContext将数据模型与页面组件进行数据动态绑定,与WEB开发的前后端分离的MVVM模式相同。
- Path= 属性获得绑定数据
- DataContext:页面组件绑定数据源
xaml
<TextBox Text=”{Binding Path=name}” x:Name="zhtbs">
mvvm绑定模式
-------------------------xaml代码-----------------------
<TextBox Text=”{Binding Path=name}” x:Name="zhtbs">
public partial class zht : Window{
public zht(){
InitializeComponent();
//绑定zhtbs组件与数据模型zhtpojo建立关系
this.zhtbs.DataContext = new zhtpojo();
}
public class zhtpojo {
public string name { get; set; } = "韬哥的代码世界";//绑定TextBox数据
}
}
绑定父亲容器,子容器使用
<Grid x:Name="zhtbs">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="40"></RowDefinition>
</Grid.RowDefinitions>
<Button Grid.Row="2" Grid.Column="0" Width="100" Height="97" Click="btnThd_Click" >ddddd</Button>
<TextBox Text="{Binding Path=name}" Grid.Row="1" Grid.Column="1" />
<TextBox Text="{Binding Path=name}" />
</Grid>
2 TreeView树组件
TreeView 是树形控件是WPF中重要的控件。TreeView组件创建方法有两种,第一种页面直接生成的“静态”方法和第二种数据绑定的“动态”方法。
2.1 TreeView静态生成
使用 Xaml 在 TreeView 中创建 TreeViewItem 来创建一个树形结构,TreeViewItem属性来构架属性结构内容。
- Header属性来定义树节点内容
<TreeView FontSize="20">
<TreeViewItem Header="系统管理">
<TreeViewItem Header="部门管理">
<TreeViewItem Header="部门信息"/>
<TreeViewItem Header="部门机构"/>
<TreeViewItem Header="部门权限"/>
</TreeViewItem>
</TreeViewItem>
</TreeView>
效果图
2.2 TreeView动态生成
public partial class Frame1 : Window{
public Frame1(){
InitializeComponent();
List<TreeDot> list=new List<TreeDot>();//设置树容器
var dto1 = new TreeDot("人员管理");//定义树的数据结构
dto1.Dos.Add(new TreeDot("人员设置"));
dto1.Dos.Add(new TreeDot("人员部门"));
dto1.Dos.Add(new TreeDot("人员权限"));
list.Add(dto1);
CTreeView.ItemsSource = list;//TreeView组件名称全局唯一引用
}
public sealed class TreeDot{//定义树节点的Pojo数据模型
public TreeDot(string name) {
Name = name;
}
public string Name { get; set; }
//定义树子节点名称
public List<TreeDot> Dos { get; set; } = new List<TreeDot>();
}
}
- 创建一个数据模型来装入树形数据。数据模型名称TreeDot。
- TreeDot数据模型中定义节点名称属性Name。
- TreeDot数据模型定义树子节点List Dos。
- 定义树的数据结构。var dto1
- 将树的数据结构与TreeView的ItemsSource树组件进行绑定。
xaml代发
<TreeView x:Name="CTreeView" FontSize="20">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="local:TreeDot"---------绑定树数据结构Pojo数据模型名称
ItemsSource="{Binding Dos}">-----绑定子节点名称
<TextBlock Text="{Binding Name}"/>------------绑定节点名称
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
- TreeView 组件名称是CTreeView。
- 创建组件绑定数据 ItemTemplate 和 HierarchicalDataTemplate 模板。
- 在 HierarchicalDataTemplate 中 DataType 属性中指定作为树形的数据结构的类名称 “TreeDot” 自己定义。
- 在ItemsSource属性中定义TreeDot类中的子节点集合名称 “Dos”。
- TextBlock属性中定义树形数据机构TreeDot中节点的名称 Name属性。
2.3 TreeView事件绑定
TreeView组件事件需要在TreeView属性中定义 SelectedItemChanged事件。
<TreeView x:Name="CTreeView" FontSize="20"
SelectedItemChanged="OnTreeViewChanged">---------定义点击事件内容
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="local:TreeDot"
ItemsSource="{Binding Dos}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
事件代码
private void OnTreeViewChanged(object sender, RoutedPropertyChangedEventArgs<object> e){
TreeView t=(TreeView)sender;//获得点击事件树组件
TreeDot tv =(TreeDot)t.SelectedItem;//获得选中的树的数据结构类型
// TreeViewItem t=(TreeViewItem)((TreeView)sender).SelectedItem;
MessageBox.Show(tv.Path);//获得数据结构属性内容
}
重新定义树形数据结构,增加一个Path属性内容。
public partial class Frame1 : Window{
public Frame1(){
InitializeComponent();
List<TreeDot> list=new List<TreeDot>();//设置树容器
var dto1 = new TreeDot("人员管理", "url");
dto1.Dos.Add(new TreeDot("人员设置","page1"));
dto1.Dos.Add(new TreeDot("人员部门", "page2"));
dto1.Dos.Add(new TreeDot("人员权限", "page3"));
list.Add(dto1);
CTreeView.ItemsSource = list;
}
public sealed class TreeDot{//定义树节点的Pojo数据模型
public TreeDot(string name) {
Name = name;
}
public string Name { get; set; }
public string Path { get; set; }
//定义树子节点名称
public List<TreeDot> Dos { get; set; } = new List<TreeDot>();
}
}
静态事件获得事件参数
TreeView t=(TreeView)sender;
TreeViewItem tt=(TreeViewItem)((TreeView)sender).SelectedItem;