没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:龚雪|2020-08-05 10:20:19.510|阅读 329 次
概述:通过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@ke049m.cn
文章转载自:慧都网



注意: Cogent DataHub 软件 v11 包含一些新功能,您的目标操作系统可能不支持这些功能。
本教程主要为大家介绍如何使用DevExpress WinForms数据网格控件进行数据排序的基础知识,欢迎下载最新版组件体验!
在使用Parasoft C/C++test执行BugDetective数据流分析时,可能会遇到用户自定义的资源API,那在这种情况下,若要判断是否存在资源问题,如资源泄露等,则需要手动配置测试配置。
大型SaaS系统的自动化测试常常受制于界面变化快、结构复杂、加载机制多变等因素。从元素识别到脚本管理,SmartBear TestComplete帮助Salesforce建了可靠的自动化测试体系。
相关产品
优秀的界面控件开发包,帮助企业构建卓越应用!
DevExpress WPF Subscription高效MVVM开发模式,WPF界面解决方案首选工具,帮助企业实现酷炫动效界面。
最新文章 MORE
半岛外围网上直营相关的文章 MORE
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@ke049m.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
半岛外围网上直营 