Wpf学习(五) 数据绑定Binding【小达原创】

程序的本质是数据+算法,咱们这一篇就看看wpf程序中的数据是怎样展现在前台的。

1、咱们新建一个Wpf项目。为该项目增加【data】文件夹,在该文件夹中添加【Person】类,如下图:

2、打开【Person】类,键入以下代码:

我们现在有了一个普通的实体类,但是WPF是数据驱动界面的一项技术。(界面的数据源变化后,界面的显示会跟着变化,不需要手动刷新。)这就要求我们‘’监听“”我们的数据源。我们下面看看应该怎么做。

3、在项目中加入【BaseModel】类,在【BaseModel】类中实现监听的方法,以后所有的类都继承自【BaseModel】类。这样所有的类都具有了监听数据源变化的功能:

咱们解释一下【BaseModel】类,这个类实现了一个位于System.ComponentModel命名空间下的接口INotifyPropertyChanged;这个接口很简单,里面只有一个事件:

event PropertyChangedEventHandler PropertyChanged;

咱们要在【BaseModel】类中去调用这个事件的已经注册的方法:

if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}

这样一来【BaseModel】类中的方法RaisePropertyChanged(string propertyName)就具备了监听数据实体属性的功能。

4、改造【Person】 类,让每个属性赋值的时候都监听一下有没有变化:

5、打开MainWindow.xaml.cs文件,声明并赋值一个数据源:

这里解释一下ObservableCollection<>。【Person】类继承了【BaseModel】类,所以【Person】类可以监听自己的属性,但是那么作为一个数据集合如果数据集合的成员变了是不是也要监听呢?

答案是肯定的所以这里用了ObservableCollection<>,而不是List<>.

扩展:类型ObservableCollection<>实现了INotifyCollectionChanged接口。这个接口里面也是只有一个事件。

道理跟监听属性差不多,感兴趣的童鞋可以自己研究下,在这不做过多的解释了。

6、将我们建好的数据源赋值给MainWindow窗体的上下文数据:

this.DataContext = m_PersonList;

7、在前台我们新建一个ListBox,然后给他写一个样式:

<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style x:Key="m_ViewBoxItem" TargetType="{x:Type ListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" FontSize="20" Margin="10"></TextBlock>
<TextBlock Text="{Binding Age}" FontSize="20" Margin="10"></TextBlock>
<TextBlock Text="{Binding Sex}" FontSize="20" Margin="10"></TextBlock>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="m_ListBox" TargetType="{x:Type ListBox}">
<Setter Property="ItemContainerStyle" Value="{StaticResource m_ViewBoxItem}"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBox}">
<Grid Background="Transparent">
<ItemsPresenter SnapsToDevicePixels="{Binding SnapsToDevicePixels}"></ItemsPresenter>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<ListBox Style="{StaticResource m_ListBox}" ItemsSource="{Binding}"></ListBox>
</Grid>
</Window>

运行:

我们看到数据成功绑定到了前台。

扩展:大家可以再后台去动态的改变数据集合的成员或者数据源中的某一个成员中的属性,看看是不是数据不需要刷新就会界面更新。

时间: 2024-08-22 21:37:02

Wpf学习(五) 数据绑定Binding【小达原创】的相关文章

WPF学习笔记 - 数据绑定(在代码中)

在程序代码里,有两种设置绑定的方法,一种是调用FrameworkElement或FrameContentElement对象的SetBinding实例方法. 例如: Public MainWindow() { InitializeCompnet(); Binding binding = new Binding(); //设置源对象 binding.Source = treeview; //设置源属性 binding.Path = new PropertyPath("SelectedItem.Hea

WPF学习09:数据绑定之 Binding to List Data

从WPF学习03:Element Binding我们可以实现控件属性与控件属性的绑定. 从WPF学习07:MVVM 预备知识之数据绑定 我们可以实现控件属性与自定义对象属性的绑定. 而以上两个功能在实际应用中还是不够的,我们经常需要将列表数据与控件属性进行绑定. 例子 ListBox切换人物,下面两个文本框跟随切换,很常用的功能. XAML代码: <Window x:Class="DataTemplate.MainWindow" xmlns="http://schema

WPF学习07:MVVM 预备知识之数据绑定

MVVM是一种模式,而WPF的数据绑定机制是一种WPF内建的功能集,两者是不相关的. 但是,借助WPF各种内建功能集,如数据绑定.命令.数据模板,我们可以高效的在WPF上实现MVVM.因此,我们需要对各种MVVM相关的WPF内建功能集进行了解,才能在扎实的基础上对MVVM进行学习与实践. 本文是WPF学习03:Element Binding的后续,将说明实现数据绑定的三个重点:DataContext INotifyPropertyChanged IValueConverter MVVM简介 MV

WPF入门教程系列十五——WPF中的数据绑定(一)

使用Windows Presentation Foundation (WPF) 可以很方便的设计出强大的用户界面,同时 WPF提供了数据绑定功能.WPF的数据绑定跟Winform与ASP.NET中的数据绑定功能类似,但也有所不同,在 WPF中以通过后台代码绑定.前台XAML中进行绑定,或者两者组合的方式进行数据绑定.您可以绑定控件.公共属性.XML 或对象,WPF中的数据绑定跟WinForm与ASP.NET相比,更加快捷.灵活和简单. 一.什么是数据绑定 WPF 中的数据绑定,必须要有绑定目标和

【WPF学习】第三十五章 资源字典

原文:[WPF学习]第三十五章 资源字典 如果希望在多个项目之间共享资源,可创建资源字典.资源字典只是XAML文档,除了存储希望使用的资源外,不做其他任何事情. 一.创建资源字典 下面是一个资源字典示例,它包含一个资源: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/wi

【WPF学习】第五十五章 基于路径的动画

基于路径的动画使用PathGeometry对象设置属性.尽管原则上基于路径的动画也能用于修改任何适当数据类型的属性,但当动态改变与位置相关的属性时最有用.实际上,基于路径的动画类主要用于帮助沿着一条路径移动可视化对象. 正如在“[WPF学习]第四十三章 路径和几何图形”学过的,PathGeometry对象描述可包含直线.弧线以及曲线的图形.下图显示的示例具有一个PathGeometry对象,该对象包含两条弧线以及一条将最后定义的点连接到起点的直线段.这样就创建了一条闭合的路线,一个小的矢量图像以

WPF学习之Binding的学习(一)

程序的本质是数据加算法.通俗一点来说呢,其实就是用户给一个输入,经过算法的处理之后,计算机反馈一个输出给用户.可以很清楚的看出,在这个过程中,处于主导地位的是数据.但是,当我们在进行图形用户界面(Graphic User Interface,GUI)编程的时,数据总是处于被动地位.也就是说,程序总是在等待接收来自UI的消息/事件,在这些事件被处理之后,才会反馈给用户一个输出.我们用Data Binding可以在GUI编程时让数据回到程序的核心. **1.Data Binding在WPF中的地位*

【WPF学习】第三十二章 执行命令

原文:[WPF学习]第三十二章 执行命令 前面章节已经对命令进行了深入分析,分析了基类和接口以及WPF提供的命令库.但尚未例举任何使用这些命令的例子. 如前所述,RoutedUICommand类没有任何硬编码的功能,而是只表达命令,为触发命令,需要有命令源(也可使用代码).为响应命令,需要有命令绑定,命令绑定将执行转发给普遍的事件处理程序. 一.命令源 命令库中的命令始终可用.触发他们的最简单的方法是将它们关联到实现了ICommandSource接口的控件,其中包括继承自ButtonBase类的

【WPF学习】第二十九章 元素绑定——将元素绑定到一起

原文:[WPF学习]第二十九章 元素绑定--将元素绑定到一起 数据banding的最简单情形是,源对象时WPF元素而且源属性是依赖性属性.前面章节解释过,依赖项属性具有内置的更改通知支持.因此,当在源对象中改变依赖项属性的值时,会立即更新目标对象中的绑定属性.这正是我们所需要的行为--而且不必为此构建任何额外的基础结构. 为理解如何将一个元素绑定到另一个元素,下面创建一个简单的示例.该示例窗口包含了两个控件:一个Slider控件和一个具有单行文本的TextBlock控件.如果向右拖动滑动条上的滑