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

devtools/2024/11/25 17:50:57/

列变更,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.ppmy.cn/devtools/136898.html

相关文章

pytorch经典训练流程

文章目录 [toc]1. **经典训练流程和任务&#xff1a;监督学习****1.1 什么是监督学习&#xff1f;****1.2 为什么要设计训练流程&#xff1f;****1.3 怎么设计训练流程&#xff1f;****代码示例&#xff1a;监督学习的典型流程** 2. **超参数设置****2.1 什么是超参数&#xff…

Scala全文单词统计

一&#xff1a;方法 package test5 import java.io.PrintWriter import scala.io.Source //可变的Map import scala.collection.mutable object test5_1 {def main(args: Array[String]): Unit { //1.读入文件val content Source.fromFile("1.txt").mkString // …

贪心算法(2)

目录 K次取反后最大化的数组和 题解&#xff1a; 代码&#xff1a; 按身高排序&#xff08;田忌赛马的预备&#xff09; 题解&#xff1a; 代码&#xff1a; 方法一&#xff1a; 方法二&#xff1a; 优势洗牌&#xff08;田忌赛马&#xff09; 题解&#xff1a; 代…

bash笔记

0 $0 是脚本的名称&#xff0c;$# 是传入的参数数量&#xff0c;$1 是第一个参数&#xff0c;$BOOK_ID 是变量BOOK_ID的内容 1 -echo用于在命令窗口输出信息 -$()&#xff1a;是命令替换的语法。$(...) 会执行括号内的命令&#xff0c;并将其输出捕获为一个字符串&#xff…

Ubuntu问题 - 显示ubuntu服务器上可用磁盘空间 一条命令df -h

目的 想要放我的 数据集 到新的ubuntu服务器中, 不知道存储空间够不够 开始 使用以下命令直接查看 df -h

JVM垃圾回收详解.②

空间分配担保 空间分配担保是为了确保在 Minor GC 之前老年代本身还有容纳新生代所有对象的剩余空间。 《深入理解 Java 虚拟机》第三章对于空间分配担保的描述如下&#xff1a; JDK 6 Update 24 之前&#xff0c;在发生 Minor GC 之前&#xff0c;虚拟机必须先检查老年代最大…

3349、检测相邻递增子数组 Ⅰ

3349、[简单] 检测相邻递增子数组 Ⅰ 1、题目描述 给你一个由 n 个整数组成的数组 nums 和一个整数 k&#xff0c;请你确定是否存在 两个 相邻 且长度为 k 的 严格递增 子数组。具体来说&#xff0c;需要检查是否存在从下标 a 和 b (a < b) 开始的 两个 子数组&#xff0c…

【AIGC】破解ChatGPT!如何使用高价值提示词Prompt提升响应质量

文章目录 为什么高价值提示词如此重要&#xff1f;&#x1f50d;1.1 提升响应的相关性和准确性1.2 节省时间与资源1.3 增强用户体验 了解ChatGPT的工作原理&#x1f9e0;2.1 语言模型的训练过程2.2 上下文理解与生成2.3 限制与挑战 高价值提示词的核心要素✍️3.1 清晰明确的指…