using DevExpress.Mvvm.POCO; using DevExpress.XtraBars; using DevExpress.XtraEditors; using DevExpress.XtraEditors.Repository; using DevExpress.XtraLayout.Utils; using DevExpress.XtraVerticalGrid.Events; using PBS.Vmo; using System.ComponentModel; using Yw.Untity; using Yw.WinFrmUI; namespace PBS.WinFrmUI { public partial class HomePbsProjectPropertyCtrl : XtraUserControl { public HomePbsProjectPropertyCtrl() { InitializeComponent(); //this.layoutControl1.SetupLayoutControl(); SetDescriptionVisible(false);//默认设置属性描述面板不显示 this.treeList1.InitialDefaultSettings(); } /// /// 跳转事件 /// public event Action JumpDirectEvent; private List _allBindingList; /// /// 选择设施事件 /// public event Action SelectFacEvent; /// /// 绑定对象 /// public HomePbsProjectPropertyViewModel SelectedObject { get { return this.propertyGridControl1.SelectedObject as HomePbsProjectPropertyViewModel; } set { this.propertyGridControl1.SelectedObject = value; OnChanged(); } } //改变触发 protected virtual void OnChanged() { if (this.SelectedObject == null) { // this.barBtnDirect.Visibility = BarItemVisibility.Never; } else { // this.barBtnDirect.Visibility = BarItemVisibility.Always; } } public async void SetBindingData(Vmo.PlaceVmo place) { var allList = await new BLL.Facility().GetAll(); _allBindingList = new List(); if (allList != null) { foreach (var item in allList) { if (item.PlaceID == place.ID) { _allBindingList.Add(item); } } } this.treeList1.DataSource = _allBindingList; this.treeList1.ForceInitialize(); this.treeList1.ExpandAll(); } /// /// 重新从数据源中读取数据,外观恢复刚开始加载的样子 /// public void UpdateData() { this.propertyGridControl1.UpdateData(); } /// /// 更新数据,样式不变 /// public void UpdateRows() { this.propertyGridControl1.UpdateRows(); } //设置描述控件的可见性 private void SetDescriptionVisible(bool isVisible) { var visible = isVisible ? LayoutVisibility.Always : LayoutVisibility.Never; this.layoutDescription.Visibility = this.splitterItem1.Visibility = visible; } //自定义属性值显示内容 private void propertyGridControl1_CustomDrawRowValueCell(object sender, CustomDrawRowValueCellEventArgs e) { var rowTypeFullName = e.Row.Properties.RowType.FullName; if (rowTypeFullName == typeof(DateTime).FullName) { e.CellText = ((DateTime)e.Properties.Value).ToString("yyyy-MM-dd HH:mm:ss"); } else { var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row); var displayUnit = (DisplayUnitAttribute)descriptor.Attributes[typeof(DisplayUnitAttribute)]; if (displayUnit != null) { if (e.Properties.Value != null) { e.CellText = e.Properties.Value.ToString() + displayUnit.Unit; } } } } //属性编辑框的显示与取消 private void propertyGridControl1_ShowingEditor(object sender, CancelEventArgs e) { var rowTypeFullName = this.propertyGridControl1.FocusedRow.Properties.RowType.FullName; var fieldName = this.propertyGridControl1.FocusedRow.Properties.FieldName.Split(new char[] { '.' }).Last(); if (rowTypeFullName == typeof(Image).FullName) { e.Cancel = true; return; } var descriptor = this.propertyGridControl1.GetPropertyDescriptor(this.propertyGridControl1.FocusedRow); var showEditor = (ShowEditorAttribute)descriptor.Attributes[typeof(ShowEditorAttribute)]; if (showEditor != null) { if (!showEditor.ShowEditor) { e.Cancel = true; return; } } } //行标题,描述,编辑框 private void propertyGridControl1_CustomRecordCellEdit(object sender, GetCustomRowCellEditEventArgs e) { var fieldName = e.Row.Properties.FieldName.Split(new char[] { '.' }).Last(); var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row); var rowTypeFullName = e.Row.Properties.RowType.FullName; #region 属性显示名称和描述 //名称 var attri_caption = (DisplayNameAttribute)descriptor.Attributes[typeof(DisplayNameAttribute)]; if (attri_caption != null && !string.IsNullOrEmpty(attri_caption.DisplayName)) { e.Row.Properties.Caption = attri_caption.DisplayName; } //备注 if (e.Row.Properties.Value == null) { e.Row.Properties.ToolTip = string.Empty; } else { if (e.Row.Properties.RowType.IsEnum) { e.Row.Properties.ToolTip = ((Enum)(e.Row.Properties.Value)).GetDisplayText(); } else if (e.Row.Properties.RowType.FullName == typeof(DateTime).FullName) { e.Row.Properties.ToolTip = ((DateTime)e.Row.Properties.Value).ToString("yyyy-MM-dd HH:mm:ss"); } else if (e.Row.Properties.RowType.FullName == typeof(Image).FullName) { e.Row.Properties.ToolTip = string.Empty; } else { e.Row.Properties.ToolTip = e.Row.Properties.Value.ToString(); } } #endregion 属性显示名称和描述 #region bool if (rowTypeFullName == typeof(bool).FullName) { var ckEdit = new RepositoryItemCheckEdit(); ckEdit.CheckStyle = DevExpress.XtraEditors.Controls.CheckStyles.Standard; if (e.Row.Properties.ReadOnly == true) { ckEdit.ReadOnly = true; } e.RepositoryItem = ckEdit; } #endregion bool #region 富文本 var attri_multi = (MultiTextAttribute)descriptor.Attributes[typeof(MultiTextAttribute)]; if (attri_multi != null) { var memoEdit = new RepositoryItemMemoEdit(); if (e.Row.Properties.ReadOnly == true) { memoEdit.ReadOnly = true; } e.RepositoryItem = memoEdit; } #endregion 富文本 #region 图片 if (rowTypeFullName == typeof(Image).FullName) { var picEdit = new RepositoryItemPictureEdit(); picEdit.ReadOnly = true; picEdit.NullText = "空"; e.RepositoryItem = picEdit; e.Row.Expanded = true; } #endregion 图片 } //属性值正在改变 private void propertyGridControl1_CellValueChanging(object sender, DevExpress.XtraVerticalGrid.Events.CellValueChangedEventArgs e) { } //属性值改变,更新地图和JsonModel对象 private void propertyGridControl1_CellValueChanged(object sender, DevExpress.XtraVerticalGrid.Events.CellValueChangedEventArgs e) { var fieldName = e.Row.Properties.FieldName.Split(new char[] { '.' }).Last(); var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row); } // 描述 private void barBtnHelp_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { var visible = this.splitterItem1.Visibility == LayoutVisibility.Always ? false : true; SetDescriptionVisible(visible); } //全部展开 private void barBtnExpandAll_ItemClick(object sender, ItemClickEventArgs e) { this.propertyGridControl1.ExpandAllRows(); } //全部折叠 private void barBtnCollpseAll_ItemClick(object sender, ItemClickEventArgs e) { this.propertyGridControl1.CollapseAllRows(); } //跳转 private void barBtnDirect_ItemClick(object sender, ItemClickEventArgs e) { /* if (this.SelectedObject == null) { return; } JumpDirectEvent?.Invoke(this.SelectedObject.Project.ID);*/ } private void treeList1_FocusedNodeChanged(object sender, DevExpress.XtraTreeList.FocusedNodeChangedEventArgs e) { var vm = this.treeList1.GetCurrentViewModel(_allBindingList); var model = new HomePbsProjectPropertyViewModel(vm); this.SelectedObject = model; SelectFacEvent.Invoke(vm); } } }