当前位置: 首页 > article >正文

C#之WPF的C1FlexGrid空间的行加载事件和列事件变更处理动态加载的枚举值

列变更,EnumDataItemStackClassTypeList数据源是枚举配置,实时查询到VM缓存的,如果是定义的枚举就不用这个麻烦了,直接在对象里面获取枚举值匹配,即

   public string ApplyStatusName
        {
            get { return EnumHelper.GetDescriptionByValue<StockClassApplyStatusEnum>(ApplyStatus); }
        }
 

问题是这个枚举是后台实时查询的,且类型不是int型,不能调用,于是只能走另外方法

页面控件使用如下

 <c1:Column Header="变更前类型" Binding="{Binding OldTypeName, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True, NotifyOnValidationError=True}" ColumnName="OldTypeName" Width="180" TextWrapping="True">
                        <c1:Column.CellTemplate>
                            <DataTemplate >
                                <TextBlock Cursor="Hand" Margin="4,0" Text="{Binding OldTypeName }"/>
                            </DataTemplate>
                        </c1:Column.CellTemplate>
                        <c1:Column.CellEditingTemplate>
                            <DataTemplate>
                                <c1:C1ComboBox BorderThickness="0" Style="{StaticResource StackPanel-C1ComboBox-Multiple}" Width="120" IsDropDownOpen="True" 
                                                 Margin="0" SelectedValue="{Binding OldType,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True }"
                                               DisplayMemberPath="Name" SelectedValuePath="Code" SelectedItemChanged="C1ComboBox_SelectedItemChanged"   
                                               ItemsSource="{Binding Path=DataContext.EnumDataItemStackClassTypeList,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=basicControls:SingletoneWin}}"/>
                            </DataTemplate>
                        </c1:Column.CellEditingTemplate>

                    </c1:Column>

行事件加载

 private new void FlexGrid_LoadedRows_RowIndex(object sender, EventArgs e)
        {
            base.c1FlexGrid_LoadedRows(sender, e);
            
            var vm = DataContext as StockClassParamChangeApplyFormVM;
            ViewHelper.SetRowIndexNoPage(sender as C1FlexGrid);
            if (CfgReviewItem == null) return;
            if (CfgReviewItem.Rows.Count > 0)
            {
                foreach (var row in CfgReviewItem.Rows)
                {
                    var model = row.DataItem as StockClassParamChangeDetailLogModel;
                    if (model == null) continue;
                    vm.CurrentDetailItem = model;
                    vm.ChangeEunmValue();

                }
            }
        }

列属性变更,获取到控件的操作行,针对操作行的列进行属性值变更,列用的下拉框控件

 private void C1ComboBox_SelectedItemChanged(object sender, C1.WPF.PropertyChangedEventArgs<object> e)
        {
            var vm = DataContext as StockClassParamChangeApplyFormVM;
            if (vm == null)
            {
                return;
            }
            var testInfo = CfgReviewItem.HitTest(Mouse.GetPosition(CfgReviewItem));
            if (testInfo.Row > -1)
            {
                var selectedItem = CfgReviewItem.Rows[testInfo.Row].DataItem as StockClassParamChangeDetailLogModel;

                vm.CurrentDetailItem = selectedItem;
                vm.ChangeEunmValue();
            }

        }

       //vm中处理,因为要刷新属性
        public void ChangeEunmValue()
        {
            if (CurrentDetailItem != null)
            {
                int? changeTypes = CurrentDetailItem.ChangeType;
                string newTypes = CurrentDetailItem.NewType;
                string oldTypes = CurrentDetailItem.OldType;
                if (changeTypes.HasValue) {
                    foreach(EnumDataItemModel model in EnumDataItemStackClassChangeTypeList) {
                        if (model.Code.Equals(Convert.ToString(changeTypes))) {
                            CurrentDetailItem.ChangeTypeName = model.Name;
                        }
                    }
             
                }
                if (!string.IsNullOrEmpty(newTypes))
                {
                    foreach (EnumDataItemModel model in EnumDataItemStackClassTypeList)
                    {
                        if (model.Code.Equals(Convert.ToString(newTypes)))
                        {
                            CurrentDetailItem.NewTypeName = model.Name;
                        }
                    }

                }
                if (!string.IsNullOrEmpty(oldTypes))
                {
                    foreach (EnumDataItemModel model in EnumDataItemStackClassTypeList)
                    {
                        if (model.Code.Equals(Convert.ToString(oldTypes)))
                        {
                            CurrentDetailItem.OldTypeName = model.Name;
                        }
                    }

                }
                RaisePropertyChanged(() => CurrentDetailItem);
            }
        }


http://www.kler.cn/a/404339.html

相关文章:

  • [C++]:C++11(三)
  • 如何快速将Excel数据导入到SQL Server数据库
  • NLP论文速读(MPO)|通过混合偏好优化提高多模态大型语言模型的推理能力
  • 51c自动驾驶~合集31
  • Bug:gomonkey系列问题(undefined: buildJmpDirective)
  • 简单分析数据被序列化后的内容
  • QT实现列表通过向上向下翻页按钮翻页,以及上下键逐行显示文本行,向左向右键翻页功能
  • 图论之最小生成树计数(最小生成树的应用)
  • 使用API有效率地管理Dynadot域名,删除账户中的whois联系人信息
  • 在 Linux 中,重启命令reboot
  • Linux 用户管理
  • Python简介以及解释器安装(保姆级教学)
  • 一文解读数据仓库的分层逻辑和原理
  • 【Linux从青铜到王者】Linux进程间通信(一)——待完善
  • Python设计模式详解之1 —— 单例模式
  • 例题10-4 冒泡排序 字符串排序
  • Web3游戏先锋 Big Time Studios 重磅推出 $OL 通证,赋能 Open Loot 游戏平台
  • Centos 7 安装 Docker 最新版本
  • 「OpenCV交叉编译」ubuntu to arm64
  • 刘艳兵-DBA042-下述哪些文件是在CREATE DATABASE命令中创建的?
  • 无重复字符的最长子串习题分析
  • 机器翻译基础与模型 之三:基于自注意力的模型
  • 实验室管理智能化:Spring Boot技术实现
  • JavaEE 线程安全
  • 新版Python 3.13官方支持Android 5.0及以上版本:详细解读及开发指南
  • element ui table 每行不同状态