有时候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 编辑状态切换的更多相关文章

  1. input编辑框编辑状态切换

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. 利用WPF建立自己的3d gis软件(非axhost方式)(二)基础状态切换

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(二)基础状态切换   先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew 密 ...

  3. [C1] C1ComboBox 的非编辑状态优化

    一.前言 先看看 WPF 自带的 ComboBox 在非编辑状态,自定义 ItemTemplate 的情况下,效果如下图所示: 其当前选中的项(红框内)与自定义的 ItemTemplate 一样: 但 ...

  4. jqgrid 选中行触发编辑,切换下一行时验证和异步保存上一行数据

    有时,我们需要批量修改或填写一些相似的数据.可以以jqgrid表来显示,可能的效果如下: 选中触发行编辑参考:jqgrid 单击行启用行编辑,切换行保存原编辑行 本文主要说说验证和异步保存上一条数据的 ...

  5. Android EditText 状态切换

    不可编辑状态 <EditText                     android:id="@+id/ed_newPwd"                     an ...

  6. Easyui 设置datagrid 进入编辑状态,保存结束编辑

    在datagrid中如何实现让一行进入编辑状态,修改数据后,保存信息呢? //点击列表变成文本框,进入可编辑状态 $(function () { var doc = $(document), tabl ...

  7. MVC编辑状态两个DropDownList联动

    前几天使用jQuery在MVC应用程序中,实现了<jQuery实现两个DropDownList联动(MVC)>http://www.cnblogs.com/insus/p/3414480. ...

  8. datagrid combobox事件更新编辑状态下的datagrid行

    请问如何从上图状态 点击下拉的combobox中值然后在不取消datagrid编辑状态下更新这一行另一列的数据,达到下图这样的效果: 非常感谢! 给你的combobox  绑定一个onSelect 事 ...

  9. iOS7 iOS8 UITableviewCell处于编辑状态,dismiss或者back崩溃

    今天在项目中遇到一个坑爹的 Crash , 在 iOS7 iOS8 UITableviewCell处于编辑状态,dismiss或者back崩溃  iOS9不会 原因:苹果的BUG代码 解决:在视图消失 ...

随机推荐

  1. SEO和SEM的区别

    SEO是属于SEM的一部分,SEO和SEM最主要的是最终目标的不同: SEO主要是为了关键词的排名.网站的流量.网站的结构.搜索引擎中页面收录的数据. SEM是通过SEO技术基础上扩展为搜索引擎中所带 ...

  2. 为什么Smalltalk不流行

    最近读到一本书,说Python程序员比Java程序员聪明.同理,懂Smalltalk的程序员也比Java程序员聪明.所以,我在StackOverflow上找到这个关闭很久的问题,整理了一下,跟大家分享 ...

  3. sql中的日期查询

    今天的所有数据: 昨天的所有数据: 7天内的所有数据: 30天内的所有数据: 本月的所有数据: 本年的所有数据: 查询今天是今年的第几天: select datepart(dayofyear,getD ...

  4. Spark难道比oracle性能还差?百万级数据测试性能

    本人对大数据方面也是刚刚研究,由于工作需要在实时查询与统计的性能方面要深入学习.现测试性能如下:   环境:VirtualBox  host-only ubuntu版本: Linux master 4 ...

  5. comet4j

    简介 准备工作 下载服务端jar文件 下载客户端js文件 修改服务器配置文件 在web.xml中加载Comet4J框架 客户端使用简介 JS.Engine.start方法 JS.Engine.stop ...

  6. VMware 12 的vmware tools安装和如何使用(系统是CENTOS6.5)

    1.用了一下虚拟机vmware12,但是总是没法使用它的vmware Tool ,网上一直说在哪个哪个文件夹,其实并没有 2.于是我用命令行找到了在系统中的VMware Tools 3.首先,保证li ...

  7. R语言基础绘图

    一.可以通过代码或者图形用户界面保存图形,绘图语句夹在开启目标图形设备语句和关闭图形设备的语句之间: pdf("filename.pdf") png("filename. ...

  8. 通过.net反射技术实现DataReader转换成Model实体类列表

     public static T ReaderToModel<T>(IDataReader dr) { try {  using (dr) {  if (dr.Read()) {  Typ ...

  9. Java程序,求学员的平均成绩

    第一步,系统提示输入学员的人数. 第二步,逐一获取学员的分数,并累计. 第三步,求平均成绩,并输出. import java.util.Scanner; public class chengji { ...

  10. API测试-Super Test

    框架选择 Super Test:基本的HTTP请求,返回判断 Chai:对返回的结果进行判断 grunt:集成jenkins grunt-mocha-test:grunt任务 Jenkins环境配制 ...