WPF 编辑状态切换
有时候DataGrid编辑的时候一个属性需要根据别的属性呈现不同的编辑状态。这就需要一个做一个状态切换。比如地址是1的时候,读写类型是读写、只读、只写。地址是2的时候,就只读。状态栏切换为TextBook不能修改。效果如下:


1.先需要在资源字典中定义2个模板:
<UserControl.Resources>
<ResourceDictionary>
<DataTemplate x:Key="TextBlockTemplate" DataType="viewModel:IoDataItemViewModel" >
<TextBlock Text="{Binding ReadWriteTypeStr,UpdateSourceTrigger=PropertyChanged}" TextAlignment="Center" VerticalAlignment="Stretch" />
</DataTemplate>
<DataTemplate x:Key="ComBoxTemplate" DataType="viewModel:IoDataItemViewModel">
<ComboBox Text="{Binding ReadWriteTypeStr, UpdateSourceTrigger=PropertyChanged}" Loaded="FrameworkElement_OnLoaded"
ItemsSource="{x:Static viewModel:ReadWriteTypeView.ReadWriteTypes}" SelectedValuePath="Key" DisplayMemberPath="Value"
BorderThickness="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center">
</ComboBox>
</DataTemplate>
</ResourceDictionary>
</UserControl.Resources>
2.定义模板选择器
定义了一个TextBlock和Combox模板。在xaml中初始化。
public class IoItemReadWriteTypeGridCellTemplateSelector : DataTemplateSelector
{
public DataTemplate ComBoxTemplate { get; set; }
public DataTemplate TextBlockTemplate { get; set; } public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var ioitem = item as IoDataItemViewModel;
if (ioitem == null)
return base.SelectTemplate(item, container); var type = IOAddressHelper.GetReadWriteType(ioitem.IoDeviceViewModel.IoDevice.DriverName, ioitem.Address); if (type != ReadWriteType.ReadWrite)
{
return TextBlockTemplate;
}
return ComBoxTemplate;
}
}
3.在Grid Column定义中绑定对象。初始化TextBlockTemplate和 ComBoxTemplate, 这样在触发编辑状态的时候,会根据地址的不同出现不同的编辑状态
<syncfusion:GridTemplateColumn HeaderText="读写类型" MappingName="ReadWriteType" MinimumWidth="100" ColumnSizer="SizeToHeader" HorizontalHeaderContentAlignment="Center">
<syncfusion:GridTemplateColumn.CellTemplate>
<DataTemplate DataType="viewModel:IoDataItemViewModel">
<TextBlock Text="{Binding ReadWriteTypeStr,UpdateSourceTrigger=LostFocus}" HorizontalAlignment="Center" VerticalAlignment="Center" />
</DataTemplate>
</syncfusion:GridTemplateColumn.CellTemplate>
<syncfusion:GridTemplateColumn.EditTemplate>
<DataTemplate DataType="viewModel:IoDataItemViewModel">
<TextBlock Text="{Binding ReadWriteTypeStr,UpdateSourceTrigger=LostFocus}" />
</DataTemplate>
</syncfusion:GridTemplateColumn.EditTemplate>
<syncfusion:GridTemplateColumn.EditTemplateSelector>
<local:IoItemReadWriteTypeGridCellTemplateSelector TextBlockTemplate="{StaticResource TextBlockTemplate}" ComBoxTemplate="{StaticResource ComBoxTemplate}"></local:IoItemReadWriteTypeGridCellTemplateSelector>
</syncfusion:GridTemplateColumn.EditTemplateSelector>
</syncfusion:GridTemplateColumn>
WPF 编辑状态切换的更多相关文章
- input编辑框编辑状态切换
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 利用WPF建立自己的3d gis软件(非axhost方式)(二)基础状态切换
原文:利用WPF建立自己的3d gis软件(非axhost方式)(二)基础状态切换 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew 密 ...
- [C1] C1ComboBox 的非编辑状态优化
一.前言 先看看 WPF 自带的 ComboBox 在非编辑状态,自定义 ItemTemplate 的情况下,效果如下图所示: 其当前选中的项(红框内)与自定义的 ItemTemplate 一样: 但 ...
- jqgrid 选中行触发编辑,切换下一行时验证和异步保存上一行数据
有时,我们需要批量修改或填写一些相似的数据.可以以jqgrid表来显示,可能的效果如下: 选中触发行编辑参考:jqgrid 单击行启用行编辑,切换行保存原编辑行 本文主要说说验证和异步保存上一条数据的 ...
- Android EditText 状态切换
不可编辑状态 <EditText android:id="@+id/ed_newPwd" an ...
- Easyui 设置datagrid 进入编辑状态,保存结束编辑
在datagrid中如何实现让一行进入编辑状态,修改数据后,保存信息呢? //点击列表变成文本框,进入可编辑状态 $(function () { var doc = $(document), tabl ...
- MVC编辑状态两个DropDownList联动
前几天使用jQuery在MVC应用程序中,实现了<jQuery实现两个DropDownList联动(MVC)>http://www.cnblogs.com/insus/p/3414480. ...
- datagrid combobox事件更新编辑状态下的datagrid行
请问如何从上图状态 点击下拉的combobox中值然后在不取消datagrid编辑状态下更新这一行另一列的数据,达到下图这样的效果: 非常感谢! 给你的combobox 绑定一个onSelect 事 ...
- iOS7 iOS8 UITableviewCell处于编辑状态,dismiss或者back崩溃
今天在项目中遇到一个坑爹的 Crash , 在 iOS7 iOS8 UITableviewCell处于编辑状态,dismiss或者back崩溃 iOS9不会 原因:苹果的BUG代码 解决:在视图消失 ...
随机推荐
- js中typeof与instanceof用法区别
今天写JS代码,遇到动态生成多个名称相同的input复选按钮 需要判断其是否是数组,用到了if (typeof(document.MapCheckMgr.checkid)!="undefin ...
- ubuntu linux mysql 安装 基本操作 命令
mysql --help #如果有信息证明系统已经安装了mysql mysql -V #查看版本号 netstat -tap|grep mysql #检查mysql是否在启动状态 卸载mysql: s ...
- Numpy 学习之路(1)——数组的创建
数组是Numpy操作的主要对象,也是python数据分析的主要对象,本系列文章是本人在学习Numpy中的笔记. 文章中以下都基于以下方式的numpy导入: import numpy as np fro ...
- Ajax Step By Step3
第三[.$.getScript()和$.getJSON()] jQuery 提供了一组用于特定异步加载的方法:$.getScript(),用于加载特定的 JS 文件: $.getJSON(),用于专门 ...
- CSS实现完美垂直居中
之前看到很多人一直都问这个问题,不过当时我没当一回事,因为在 CSS 中要垂直居中,多数是在有高度的情况下,或者容器高度不定的情况下才用,看上去比较舒服,而且实现的方法也不少,不一定要拘泥于和 tab ...
- 构建angular项目
1. 安装yo与gulp bower $ npm install -g yo $ npm install -g gulp bower 2. 快速创建 $ npm install -g gene ...
- CAD 二次开发--属性块
1.属性块的定义 属性块是有构成的实体和附加信息(属性)组成的,属性块中块的定义与简单块中块的定义一样,而属性的定义主要是通过属性的AttributeDefinition类的有关属性和函数来实现的.具 ...
- 注意ArrayAdapter的Add()方法
ArrayAdapter类可以作为ListView等的适配器资源,并且可以动态向适配器中添加新的数据,这就是ArrayAdapter.Add()方法的作用.但是在使用该方法时如果出错,那就需要检查Ar ...
- 原生js-日历插件
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- Django学习中的问题总结
1. 在windows环境下,用pip安装Django后通过在python/Script目录下会生成django-admin.py文件,此时由于pip环境变量已经添加,diango-admin.py与 ...