WPF 中 MVVM 如何绑定DataGrid 并动态修改单元格

2017-08-19 11:49:24来源:http://servucn.blog.51cto.com/1451898/1957302作者:人点击

分享

1.什么是MVVM?

MVVM是Model、View、ViewModel的简写,这种模式的引入就是使用ViewModel来降低View和Model的耦合,说是降低View和Model的耦合。也可以说是是降低界面和逻辑的耦合,理想情况下界面和逻辑是完全分离的,单方面更改界面时不需要对逻辑代码改动,同样的逻辑代码更改时也不需要更改界面。同一个ViewModel可以使用完全不用的View进行展示,同一个View也可以使用不同的ViewModel以提供不同的操作。

2.项目目录

从上面的图我们可以看出,处理事务的文件有几个类型:View,ViewModel,Command,Property,Model,这个几个类型的图片

最下面的ViewModelBase.cs就是Property,对应处理触发属性发现变化的事务。

3.代码分析:

a):入口 App.xaml

privatevoidApplication_Startup(objectsender,StartupEventArgse)
{
//创建一个ViewModel;
MainViewModelmode=newMainViewModel();
//初始化ViewModel内容
mode.ItemDatas=newObservableCollection();
mode.ItemDatas.Add(newItemData{Title="TST",Content="sss"});
mode.ItemDatas.Add(newItemData{Title="2TST",Content="2sss"});
//初始化View;
MainWindowmain=newMVVMGridDemo.MainWindow();
//把ViewModel绑定到View上
main.DataContext=mode;
//显示窗口
main.Show();
}

b):MainWindow窗口ViewModel;

view代码

<Grid>
<DataGridx:Name="dataGrid"AutoGenerateColumns="False"ItemsSource="{BindingItemDatas}"HorizontalAlignment="Left"Margin="57,59,0,0"VerticalAlignment="Top"Height="173"Width="320">
<DataGrid.Columns>
<DataGridTextColumnHeader="Title"Width="100"Binding="{BindingTitle}"/>
<DataGridTextColumnHeader="Content"Width="200"Binding="{BindingContent}"/>
</DataGrid.Columns>
</DataGrid>
<Buttonx:Name="button"Command="{BindingButtonClick}"CommandParameter="{BindingElementName=dataGrid}"Content="修改"HorizontalAlignment="Left"Margin="57,10,0,0"VerticalAlignment="Top"Width="75"/>
<TextBoxx:Name="textBox"HorizontalAlignment="Left"Height="19"Margin="155,10,0,0"TextWrapping="Wrap"Text="{BindingTexxT}"VerticalAlignment="Top"Width="97"/>
</Grid>

viewmodel代码

publicclassMainViewModel:ViewModelBase{
privateObservableCollection_itemdatas;//view中Name为Texxt的值在这里实现
privatestring_texxt;
publicstringTexxT{
get{returnthis._texxt;}
set
{
this._texxt=value;
OnPropertyChanged("TexxT");
}
}//view中itemsourse为ItemData的数据绑定;
publicObservableCollectionItemDatas{
get{return_itemdatas;}
set
{
this._itemdatas=value;
OnPropertyChanged("ItemDatas");
}
}//修改按钮点击事件在这里实现
publicICommandButtonClick{
get
{

returnnewActionCommand(p=>BClick(p));
}
}
privatevoidBClick(objectobj)
{

DataGridbox=(DataGrid)obj;

ItemDatas[0].Title=TexxT;//刷新dataGrid
box.Items.Refresh();

}

}

全部源代码:https://github.com/servucn/MVVMGridDemo

交流地址:http://www.ucasp.net/wpfresources/mvvmgriddemo.shtml


最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台