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);

}

}

相关推荐
life_time_2 小时前
C语言(22)
c语言·开发语言
界面开发小八哥2 小时前
界面组件DevExpress WPF中文教程:Grid - 如何显示和隐藏列?
wpf·界面控件·devexpress·ui开发·.net9
Minner-Scrapy2 小时前
DApp 开发入门指南
开发语言·python·web app
孤雪心殇2 小时前
简单易懂,解析Go语言中的Map
开发语言·数据结构·后端·golang·go
庸俗今天不摸鱼2 小时前
Canvas进阶-4、边界检测(流光,鼠标拖尾)
开发语言·前端·javascript·计算机外设
菠菠萝宝2 小时前
【Java八股文】10-数据结构与算法面试篇
java·开发语言·面试·红黑树·跳表·排序·lru
奔跑吧邓邓子2 小时前
【Python爬虫(36)】深挖多进程爬虫性能优化:从通信到负载均衡
开发语言·爬虫·python·性能优化·负载均衡·多进程
不会Hello World的小苗2 小时前
Java——链表(LinkedList)
java·开发语言·链表
lsx2024063 小时前
Perl 面向对象编程指南
开发语言