翻譯|使用教程|編輯:龔雪|2020-08-05 10:20:19.510|閱讀 324 次
概述:通過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@fc6vip.cn
文章轉載自:慧都網