有时候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. Oracle直方图的详细解析

    yuanwen:http://blog.csdn.net/javacoffe/article/details/5578206 Oracle直方图解析 一.    何谓直方图: 直方图是一种统计学上的工 ...

  2. ASP.NET ashx实现无刷新页面生成验证码

    现在大部分网站登陆时都会要求输入验证码,在网上也看了一些范例,现在总结一下如何实现无刷新页面生成验证码. 效果图: 实现方式: 前台: <div> <span>Identify ...

  3. Mac 系统下的环境变量

    1.查看电脑环境变量   -->echo $PATH 2. 新建环境变量   sudo vim ~/.bash_profile  输入密码 3. 按 I ,编辑新的环境变量地址,保存 退出 :w ...

  4. delegate notification kvo三者比较

    IOS 如何选择delegate.notification.KVO? 前面分别讲了delegate.notification和KVO的实现原理,以及实际使用步骤,我们心中不禁有个疑问,他们的功能比较类 ...

  5. ios6 滤镜相关知识内容网址

    http://blog.csdn.net/justinjing0612/article/details/8145607#

  6. python 使用字符串名调用类以及调用类方法名

    在python中,有时调用者仅知道类名和类方法,不负责实际的函数调用,而是将要调用的类名和类方法告诉一个中间函数,由中间函数负责实际调用函数.中间函数需以被告知的字符串调用类和类方法.         ...

  7. python3下安装Django

    1.下载python3 https://www.Python.org/ 我下载的是Python3.5.1 选的 Windows x86-64 executable installer 2. 打开cmd ...

  8. 【九度OJ】题目1054:字符串内排序

    题目描述: 输入一个字符串,长度小于等于200,然后将输出按字符顺序升序排序后的字符串. 输入: 测试数据有多组,输入字符串. 输出: 对于每组输入,输出处理后的结果. 样例输入: bacd 样例输出 ...

  9. 最小和(min)

    题目描述: N 个数排成一排,你可以任意选择连续的若干个数,算出它们的和.问该如何选择才能 使得和的绝对值最小. 如:N=8 时,8个数如下: 1    2    3     4    5    6 ...

  10. springmvc No mapping found for HTTP request with URI in Dispatc

    springmvc No mapping found for HTTP request with URI in Dispatc 博客分类: Java Web springmvcspring MVCNo ...