没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:龚雪|2020-08-05 10:20:19.510|阅读 273 次
概述:通过DevExpress WPF Controls,您能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
相关链接:
下载DevExpress v20.1完整版 DevExpress v20.1汉化资源获取
通过DevExpress WPF Controls,您能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。
有以下DTO类(在WCF服务中):
/// <summary> /// Класс ТБК /// </summary> [DataContract] public class DTOTbkInfo { /// <summary> /// Код ТБК /// </summary> [DataMember] public int Code { get; set; } /// <summary> /// Название ТБК /// </summary> [DataMember] public string Name { get; set; } /// <summary> /// Код уровня ТБК /// </summary> [DataMember] public int LevelCode { get; set; } /// <summary> /// Код родительского ТБК /// </summary> [DataMember] public int? ParentCode { get => ParentTbk?.Code; set { } } /// <summary> /// Родительское ТБК /// </summary> public DTOTbkInfo ParentTbk { get; set; } /// <summary> /// Список дочерних ТБК /// </summary> [DataMember] public List<DTOTbkInfo> ChildTbkList { get; set; } public DTOTbkInfo() { //empty code } public DTOTbkInfo(GetTbkList_Result tbk) { Code = tbk.tbk; Name = tbk.name; LevelCode = tbk.level; } public static DTOTbkInfo Create(GetTbkList_Result tbk) => new DTOTbkInfo(tbk); }
在此类中,ChildTbkList属性包含子类列表,并且ParentTbk属性对客户端不可用(出于服务的内部目的),ParentCode属性包含父记录的代码。
在客户端上,使用以下数据模型:
/// <summary> /// Класс с информацией о ТБК товара /// </summary> public class TbkInfo : ViewModelBase { /// <summary> /// Код ТБК /// </summary> public int Code { get; set; } /// <summary> /// Название ТБК /// </summary> public string Name { get; set; } /// <summary> /// Общая информация о ТБК /// </summary> public string DisplayName => $"ТБК: {Code} \"{Name}\""; public TbkInfo() { //empty code } public TbkInfo(int code, string name) { Code = code; Name = name; } public static TbkInfo Create(int code, string name) => new TbkInfo(code, name); }
和类:
/// <summary> /// Класс с дополнительной информацией о ТБК товара /// </summary> public class TbkInfoExt : TbkInfo { /// <summary> /// Номер уровня /// </summary> public int LevelCode { get; set; } /// <summary> /// Код родительского ТБК /// </summary> public int? ParentCode { get; set; } /// <summary> /// Список дочерних ТБК /// </summary> public List<TbkInfoExt> ChildTbkList { get; set; } private ObservableCollection<DTOCatalogPropertyForTbk> _catalogPropertyList; /// <summary> /// Список свойств товара /// </summary> public ObservableCollection<DTOCatalogPropertyForTbk> CatalogPropertyList { get => _catalogPropertyList; set { _catalogPropertyList = value; OnPropertyChanged(nameof(CatalogPropertyList)); } } public TbkInfoExt(DTOTbkInfo tbkInfo) : base(tbkInfo.Code, tbkInfo.Name) { LevelCode = tbkInfo.LevelCode; ParentCode = tbkInfo.ParentCode; tbkInfo.ChildTbkList?.ForEach(p => { if (ChildTbkList == null) { ChildTbkList = new List<TbkInfoExt>(); } ChildTbkList.Add(TbkInfoExt.Create(p)); }); } public static TbkInfoExt Create(DTOTbkInfo tbkInfo) => new TbkInfoExt(tbkInfo); }
有以下视图模型:
public class EditRelationPropertyTbkModel : ViewModelBase { private readonly IApplicationService _appService; #region Binding properties private ObservableCollection<TbkInfoExt> _tbkList; /// <summary> /// Список ТБК /// </summary> public ObservableCollection<TbkInfoExt> TbkList { get => _tbkList; set { _tbkList = value; OnPropertyChanged(nameof(TbkList)); } } private TbkInfoExt _currentTbk; /// <summary> /// Текущий ТБК /// </summary> public TbkInfoExt CurrentTbk { get => _currentTbk; set { _currentTbk = value; OnPropertyChanged(nameof(CurrentTbk)); DefinitionCatalogPropertyList(); } } private ObservableCollection<DTOCatalogPropertyForTbk> _catalogPropertyList; /// <summary> /// Список свойств /// </summary> public ObservableCollection<DTOCatalogPropertyForTbk> CatalogPropertyList { get => _catalogPropertyList; set { _catalogPropertyList = value; OnPropertyChanged(nameof(CatalogPropertyList)); } } #endregion #region Commands private RelayCommand _saveCommand; public RelayCommand SaveCommand => _saveCommand ?? (_saveCommand = new RelayCommand(obj => { }, e => true)); private RelayCommand _cancelCommand; public RelayCommand CancelCommand => _cancelCommand ?? (_cancelCommand = new RelayCommand(obj => { })); #endregion #region Methods /// <summary> /// Метод определения списка свойств /// </summary> private void DefinitionCatalogPropertyList() { using (var proxy = new ProxyCatalog()) { var results = proxy.GetPropertyListForTbk(CurrentTbk.Code, true); CatalogPropertyList = new ObservableCollection<DTOCatalogPropertyForTbk>(results); } } #endregion public EditRelationPropertyTbkModel() { //empty code } public EditRelationPropertyTbkModel(IApplicationService appService) { _appService = appService; }
有以下视图(部分代码):
<dxg:LookUpEdit ItemsSource="{Binding TbkList}" SelectedItem="{Binding CurrentTbk}" DisplayMember="Name"> <dxg:LookUpEdit.StyleSettings> <dxg:SearchLookUpEditStyleSettings/> </dxg:LookUpEdit.StyleSettings> <dxg:LookUpEdit.PopupContentTemplate> <ControlTemplate> <dxg:GridControl x:Name="PART_GridControl"> <dxg:GridControl.Columns> <dxg:GridColumn FieldName="Code" Header="Код ТБК" /> <dxg:GridColumn FieldName="Name" Header="Название ТБК"/> </dxg:GridControl.Columns> <dxg:GridControl.View> <dxg:TreeListView AutoWidth="True" KeyFieldName="Code" TreeDerivationMode="ChildNodesSelector" ChildNodesPath="ChildTbkList" AllowEditing="False"/> </dxg:GridControl.View> </dxg:GridControl> </ControlTemplate> </dxg:LookUpEdit.PopupContentTemplate> </dxg:LookUpEdit>
问题:为什么不能选择根元素的子元素(在CurrentTbk属性ViewModel的SET中,不执行任何转换),而根元素本身也可以(在CurrentTbk属性ViewModel的SET中进行过渡) 执行。
LookUpEdit和ComboBoxEdit编辑器只能选择其ItemsSource集合中存在的那些值。在这种情况下,此集合中不包含子项,因此就是发生此问题的原因。
作为解决方案,可以将LookUpEdit.ItemsSource设置为包含父项和子项的集合,然后将GridControl.ItemsSource绑定到原始的TbkList集合。
DevExpress技术交流群2:775869749 欢迎一起进群讨论
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@wqylolg.cn
文章转载自:慧都网ONLYOFFICE 表单可以轻松收集结构化输入,但空的、非必填字段经常会被忽略。在本篇博文中,我们将演示如何构建一个宏,用于突出显示表单中所有空的、非必填字段,或者仅突出显示包含特定提示文本的字段。
CST CAD Navigator 是一款功能强大、兼容性高的 CAD 图纸查看工具,由 CADSoftTools开发,能在 Windows、macOS 和 Linux 系统上稳定运行。它拥有简洁直观的操作界面,却内置强大内核,能实现对 2D 图纸和 3D 模型的快速查看。
在企业应用中,无论是生成报告、合同还是个性化信函,程序化创建 Word 文档都是常见需求。Spire.Doc for .NET 提供了无需依赖 Microsoft Office 的 C# Word 文档处理解决方案。
在文档管理系统、法律审查工具、发票处理工具和其他企业应用程序中,搜索PDF文档中的特定文本是一项常见任务。在本篇博文中,您将学习如何使用 C# 以编程方式在 PDF 文件中搜索文本。
优秀的界面控件开发包,帮助企业构建卓越应用!
DevExpress WPF Subscription高效MVVM开发模式,WPF界面解决方案首选工具,帮助企业实现酷炫动效界面。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@wqylolg.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢