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