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代码 解决:在视图消失 ...
随机推荐
- Linux常用命令笔记一
笔记1:查看ubuntu是32位还是64位的方法及其版本号 查看ubuntu是64还是32的命令如下: uname -m 如果是i386到i686,那就是32位系统:如果是x86_64 ,那就是64系 ...
- 有关tp里搜索框的实现方法
1:
- [11]APUE:(文件)记录锁
[a] 概念 建议锁:在遵循相同记录锁规则的进程间生效,通常用于保证某个程序自身多个进程间的数据一致性 强制锁:意在保证所有进程间的数据一致性,但不一定有效:如不能应对先 unlink 后建立同名副本 ...
- sql update多表联合更新
update tabA set PrintTag=c.dp_state from tabA a inner join tabB b on a.Code=b.design inner join tabC ...
- javascript除法如何取整
Math.round(x) 四舍五入,如Math.round(0.60),结果为1:Math.round(0.49),结果为0: Math.floor(x) 向下舍入,如Math.floor(0.60 ...
- JS 关闭页面事件
主页面调用:<script src="<%=ResolveUrl("../JS/QuitJS.js") %>" type="text ...
- Ajax Step By Step2
第二.[$.get()和$.post()方法] .load()方法是局部方法(有需要父$),因为他需要一个包含元素的 jQuery 对象作为前缀.而$.get()和 $.post()是全局方法,无须指 ...
- LeetCode(97) Interleaving String
题目 Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example, Given: ...
- 【笔记】memorymanagement-whitepaper-150215
3 GC概念 Gc的职责: 1) 分配内存 2) 保证被引用的对象驻留内存 3) 对象不可达后将其占用内存回收 被引用对象被称为 “存活对象”. 不再被引用的对象称为“垃圾对象”. 找到垃圾对象 ...
- 【转】MySQL的各种timeout
因为最近遇到一些超时的问题,正好就把所有的timeout参数都理一遍,首先数据库里查一下看有哪些超时: root@localhost : test 12:55:50> show global v ...