WPF双向绑定
需求:
思想批量保存数据.
思路:
看了一下MVVM.发现只需要实现前台和后台数据的同步即可.也就是前台的文本框内容变化时后台的对象的属性也要变化就可以了.
参考:
http://www.cnblogs.com/luluping/archive/2011/05/06/2039475.html
该网址只包括单个对象,而我的需要把集合Bind到Datagrid上,在DataGrid上修改后在整批提交.思路是一样的.
即:类需从INotifyPropertyChanged继承
再定义好ViewModel,窗体和ViewModel 绑上就可以了.
public class Person : INotifyPropertyChanged
{ public event PropertyChangedEventHandler PropertyChanged; private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
if(this.PropertyChanged != null)
{
this.PropertyChanged.Invoke(this,new PropertyChangedEventArgs("Name")); }
}
} }
ViewModel
public class PersonViewModel
{
public List<Person> LiPerson
{
get;
set;
} }
Form
public partial class MainWindow : Window
{ PersonViewModel personViewModel; public MainWindow()
{
InitializeComponent(); personViewModel = new PersonViewModel();
personViewModel.LiPerson = new List<Person>();
Person person = new Person();
person.Name = "xxx";
personViewModel.LiPerson.Add(person);
Person person2 = new Person();
person2.Name = "asd";
personViewModel.LiPerson.Add(person2); this.DataContext = personViewModel;
} private void Button_Click_1(object sender, RoutedEventArgs e)
{ MessageBox.Show(personViewModel.LiPerson[0].Name);
MessageBox.Show(personViewModel.LiPerson[1].Name); }
}
xaml
<Window x:Class="WpfStudy.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="400*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"></ColumnDefinition>
<ColumnDefinition Width="200*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Content="Button" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
<TextBox HorizontalAlignment="Left" Grid.Column="0" Height="23" TextWrapping="Wrap" Text="{Binding Path=Name}" VerticalAlignment="Top" Width="120"/>
<my:DataGrid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="5"
AutoGenerateColumns="False" HorizontalAlignment="Left"
Name="dgSupGridView" ItemsSource="{Binding Path=LiPerson,Mode=TwoWay}"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" >
<my:DataGrid.Columns>
<my:DataGridTextColumn Header="Name" IsReadOnly="False" Width="100" Binding="{Binding Name}" />
</my:DataGrid.Columns>
</my:DataGrid> </Grid>
</Window>
对mvvm不熟悉的同学就可以用这种方式来实现批量保存了.
WPF双向绑定的更多相关文章
- C# Wpf双向绑定实例
Wpf中双向绑定处理需要两处 实例1: 1.前台Xaml中属性Binding 时Model指定 TwoWay <Grid> <Ellipse x:Name="ellipse ...
- WPF数据双向绑定
设置双向绑定,首先控件要绑定的对象要先继承一个接口: INotifyPropertyChanged 然后对应被绑定的属性增加代码如下: 意思就是当Age这个属性变化时,要通知监听它变化的人. 即:Pr ...
- C# Wpf集合双向绑定
说明: msdn中 ObservableCollection<T> 类 表示一个动态数据集合,在添加项.移除项或刷新整个列表时,此集合将提供通知. 在许多情况下,所使用的数据是对 ...
- 【WPF】WPF DataGrid List数据源 双向绑定通知机制之ObservableCollection使用以及MultiBinding 的应用
以下代码实现了DataGrid的简单绑定List数据源 重点要提一下的是,绑定List数据源,但是不能直接用List.比如下面的代码,使用List<GridItem>只能实现数据修改的绑定 ...
- 如何在双向绑定的Image控件上绘制自定义标记(wpf)
我们的需求是什么? 答:需要在图片上增加一些自定义标记,例如:2个图片对比时,对相同区域进行高亮. 先上效果图: 设计思路 1.概述 1.通过TargeUpdated事件,重新绘制图片进行替换. 2. ...
- WPF之Treeview实现MVVM双向绑定
Treeview分别有两个数据模板HierarchicalDataTemplate(层级数据模板)和DataTemplate(数据模板),分别应用于生成子数据项和普通数据项. 在使用过程中,如果对两个 ...
- 【.NET6+WPF】WPF使用prism框架+Unity IOC容器实现MVVM双向绑定和依赖注入
前言:在C/S架构上,WPF无疑已经是"桌面一霸"了.在.NET生态环境中,很多小伙伴还在使用Winform开发C/S架构的桌面应用.但是WPF也有很多年的历史了,并且基于MVVM ...
- 【WPF】WPF开发用户控件、用户控件属性依赖DependencyProperty实现双向绑定、以及自定义实现Command双向绑定功能演示
前言: Wpf开发过程中,最经常使用的功能之一,就是用户控件(UserControl)了.用户控件可以用于开发用户自己的控件进行使用,甚至可以用于打造一套属于自己的UI框架.依赖属性(Dependen ...
- [WPF源码分析]ContentControl依赖项属性的双向绑定,two-way binding view's DependencyProperty and ViewModel's variable
问题:自定义控件的依赖项属性和VIewModel中的变量不能双向绑定 解决思路:对比.net源码 PresentationFramework / System.Windows.Controls ...
随机推荐
- python协程的使用
1.Python对协程的支持是通过generator(生成器 yield)实现的.协程执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行. 2.调用生成器运行的过程中 ...
- replace 使用正则
python replace正则怎么用 20 下面是我的代码:s="今天是2015年10月1日国庆节,明天是2015年10月2日"s=s.replace(r'[0-9]*', '0 ...
- b1.关于em和px的关系
一般默认 1em=12px , em相对于其父元素的px定义: 但是 如果本身元素设置 font-size: 15px; em与px的比例随之变化. 一般根据浏览器默认的font-size:12p ...
- 《算法》BEYOND 部分程序 part 3
▶ 书中第六章部分程序,加上自己补充的代码,包括 Graham 扫描生成凸包,计算最远点对 ● Graham 扫描生成凸包 package package01; import java.util.Ar ...
- apache 重点难点
apache 重点难点 在于难以理解其工作原理,因为它是c 写的:其模块众多:功能强大而复杂. 其配置也是格式不齐, 比如一下子是 key value , 一下子就成了 xml. 转载: http:/ ...
- 利用STM32CubeMX来生成USB_HID_Mouse工程
硬件开发板:STM32F103C8 软件平台 好了现在开始利用STM32CubeMX来生成我们的工程 1.新建工程 选择MCU的型号 选择选择时钟 开启usb的模块 选择USB的类 配置时钟树(主要是 ...
- redis开启外网访问
redis默认只允许本地访问,要使redis可以远程访问可以修改redis.conf 打开redis.conf文件在NETWORK部分有说明 ######################### ...
- UI5-学习篇-5-SAP创建OData服务-Structure
本文介绍SAP后端系统基于数据结构创建OData服务过程. 1.创建数据字典 2.创建OData service 2.1创建Gateway service project 事务码:SEGW 点击Cre ...
- js弹出div层内容(按回退键关闭div层及遮罩)
<!--弹出的div列表对应的详情--> <div id="newhtml" class="white_content"> <di ...
- python 之列表推导式,集合推导式,以及字典推导式
https://www.cnblogs.com/weihengblog/p/8428124.html