1、界面展示:其中的布局和样式就不说了,重点在MVVM架构和数据绑定(Model层使用EF(Entity Framework)实体框架,不做介绍)。
绑定后:
2、架构介绍:
在Views层中新建CusGroupEditwindow窗体,viewmodels中建立CusGroupEditviewmodel类,在窗体的xaml或者cs中引用viewmodels对应类:
xaml中:
<Window.DataContext>
<local:CusGroupEditviewmodel/> <!--(添加引用local:为CusGroupEditviewmodel的路径)-->
</Window.DataContext>
cs:DataContext = CusGroupEditviewmodel。(添加引用路径)
/***********************************************/
*CsGroup是在viewmodel中定义的一个CusGroup对象, *
*CusGroup对象是在sql数据库中的表,在EF中的对象。 *
/***********************************************/
3、TextBox绑定:
<TextBox MaxWidth=550 Width=100 Text={Binding CsGroup.Alarm,Mode=TwoWay} />
4、Button绑定:
<Button Width=100 Height=35 Margin=10 Command={Binding BtnChangedCommand} CommandParameter=btnCusGroupSave Background=#fc8530 >
<TextBlock Text=保存 FontWeight=Bold FontSize=16></TextBlock>
</Button>
<!-- Command={Binding BtnChangedCommand}中是在viewmodel中的委托,继承ICommoand -->
<!--CommandParameter=btnCusGroupSave 参数-->
5、CheckBox绑定:
<CheckBox Name=cbCash Margin=0,0,5,0 IsChecked={Binding CsGroup.IsCash}/>
<!-- IsCash 是在sql表中CusGroup中字段,bit类型--> 6、ComboBox绑定:
6、ComboBox绑定:
<ComboBox MaxWidth=150 Width=100 SelectedValue={Binding StrCMBselectValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged} displayMemberPath=Text SelectedValuePath=Value ItemsSource={Binding LstCSGDownLevelID, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged} />
<!--SelectedValue:选中CommoBox的值,Mode双向模式,属性改变时触发;displayMemberPath:显示时绑定;SelectedValuePath:表示选择下拉框某一项对应的值;ItemsSource:绑定的数据源 -->
<!-- 其中Value和Text也可理解为数据源,在viewmodel中有赋值-->
7、DataGrid绑定:
<DataGrid ColumnWidth=* SelectedItem={Binding CurrentSelectItem} ItemsSource={Binding CsGroupsAll} AutoGenerateColumns=False IsReadOnly=True > <DataGrid.Columns> <DataGridTextColumn Header=分组编号 Binding={Binding Code} /> <DataGridTextColumn Header=分组名称 Binding={Binding Name} /> </DataGrid.Columns> </DataGrid>
/***************************************************************/
//DataGrid当前选择对象private CusGroup currentSelectItem;public CusGroup CurrentSelectItem {get { return currentSelectItem; }set{ currentSelectItem = value; GetCutCmbSelect(value); } }
/***************************************************************/
using heyin.ERP.DataModels;using heyin.ERP.IServices;using heyin.ERP.Models;using heyin.ERP.Services;using Microsoft.Practices.Prism.Commands;using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Windows;using System.Text.RegularExpressions;using System.Windows.Controls;namespace heyin.ERP.Client.viewmodels.Customer {class CusGroupEditviewmodel : Baseviewmodel {private bool bIsAdd = false; ICusGroupService CGS; //调用IService接口#region Properties 属性private Guid gCsGroupID = Guid.Empty;//All CusGroupprivate List<CusGroup> csGroupsAll;public List<CusGroup> CsGroupsAll {get { return csGroupsAll; }set{ csGroupsAll = value; //设定值OnPropertyChanged(CsGroupsAll); //在属性更改后,通知 } }private List<CusGroup> csGroupsMinPrestore;public List<CusGroup> CsGroupsAllMinPrestore {get { return csGroupsMinPrestore; }set{ csGroupsMinPrestore = value; //设定值OnPropertyChanged(CsGroupsAllMinPrestore); //在属性更改后,通知 } }//CusGroup对象private CusGroup csGroup;public CusGroup CsGroup {get { return csGroup; }set{ csGroup = value; OnPropertyChanged(CsGroup); } }/// <summary>/// /// </summary>private string strCMBselectValue;public string StrCMBselectValue {get { return strCMBselectValue; }set{if (value != null) { strCMBselectValue = value; OnPropertyChanged(StrCMBselectValue); } } }/// <summary>/// ComboBoxDataModel:作为一个ComboBox的对象,可以理解为数据源/// </summary>private ObservableCollection<ComboBoxDataModel> lstCSGDownLevelID;public ObservableCollection<ComboBoxDataModel> LstCSGDownLevelID {get { return lstCSGDownLevelID; }set{ lstCSGDownLevelID = value; OnPropertyChanged(LstCSGDownLevelID); } }//DataGrid当前选择对象private CusGroup currentSelectItem;public CusGroup CurrentSelectItem {get { return currentSelectItem; }set{ currentSelectItem = value; GetCutCmbSelect(value); } }private int errorCount;public int ErrorCount { get => errorCount; set => errorCount = value; }#endregion#region Commandspublic DelegateCommand<string> BtnChangedCommand { get; set; }public DelegateCommand<CusGroup> TxtChangedCommand { get; set; } #endregionpublic CusGroupEditviewmodel() { CGS = new CusGroupService(); CsGroupsAll = new List<CusGroup>(); csGroup = new CusGroup(); LstCSGDownLevelID = new ObservableCollection<ComboBoxDataModel>(); BtnChangedCommand = new DelegateCommand<string>(MenuClick); TxtChangedCommand = new DelegateCommand<CusGroup>(ChangeCMBValue); GetAllCusGroups(); }#region ButtonClickprivate void MenuClick(string strMessage) {if (string.IsNullOrEmpty(strMessage)) return;if (CsGroup == null) return;switch (strMessage) {case btnCusGroupSave: Save();break;case btnCusGroupAdd: Add();break;case btnCusGroupDelete: Delete();break; } }#endregion ButtonClick#region motheds/// <summary>/// 获取全部Group/// </summary>private void GetAllCusGroups() {//获取满足条件的客户分组信息 CsGroupsAll.Clear(); CsGroupsAll = CGS.Get(s => s.IsDelete == 0); GetAllCMBItems();//给降档分组下拉框赋值if ((gCsGroupID == null || gCsGroupID == Guid.Empty) && CsGroupsAll.Count > 0) CsGroup = CsGroupsAll[0]; //给基础信息等赋值StrCMBselectValue = CsGroup.DownLevelID.ToString();//设置降档分组默认值 }/// <summary>/// 添加/// </summary>/// <param name=cg></param>private void AddCusGroup(CusGroup cg) { cg.ID = Guid.NewGuid(); //新建分组GUIDcg.IsDelete = 0; //默认为0:不删除cg.CreateBy = App.GetCurrentUserId();//创建人员关联员工 GUIDcg.CreateTime = DateTime.Now; //初始化创建时间,应该使用服务器当前时间bool c = CGS.Add(cg);if (c) { MessageBox.Show(string.Format(创建新组别【{0}】成功!, CsGroup.Name), 提示, MessageBoxButton.OK, MessageBoxImage.@R_772_4045@ion); GetAllCusGroups(); bIsAdd = false; } }/// <summary>/// 修改/// </summary>/// <param name=cg></param>private void UpdateCusGroup(CusGroup cg) { bIsAdd = false; cg.UpdateTime = DateTime.Now; cg.UpdateBy = App.GetCurrentUserId();//更新人员关联员工 GUIDstring[] str = { UpdateTime, UpdateBy };bool b = CGS.Edit(cg, str);if (b) { MessageBox.Show(更改组别【成功】!, 提示, MessageBoxButton.OK, MessageBoxImage.@R_772_4045@ion); GetAllCusGroups(); } }/// <summary>///删除方法(实为更新)/// </summary>/// <param name=cg></param>private void DeleteCusGroup(CusGroup cg) { cg.IsDelete = 1; //更改数据库删除标志cg.UpdateTime = DateTime.Now; //更新删除时间cg.UpdateBy = App.GetCurrentUserId();//更新人员关联员工 GUIDstring[] str = { UpdateTime, IsDelete, UpdateBy };bool b = CGS.Edit(cg, str);if (b) {//MessageBox.Show(string.Format(已删除组别【{0}】!, CsGroup.Name), 提示, MessageBoxButton.OK, MessageBoxImage.@R_772_4045@ion); GetAllCusGroups(); CsGroup = new CusGroup(); //清空对象bIsAdd = true; } }/// <summary>/// 插入和更新方法调用/// </summary>private void Save() {if (ErrorCount > 0) {//判断必填数据是否为空:为空则提示MessageBox.Show(请核对所填数据, 提示, MessageBoxButton.YesNo, MessageBoxImage.@R_772_4045@ion);return; }if (bIsAdd) AddCusGroup(CsGroup);elseUpdateCusGroup(CsGroup); }/// <summary>/// 获取降档分组下拉列表的值,并指定默认值/// </summary>/// <param name=value></param>private void GetCutCmbSelect(CusGroup value) { bIsAdd = false;//点击新增后,再选择列表的逻辑if (value != null) { CsGroup = CGS.GetById(value.ID);//查找出当前选中的对象gCsGroupID = CsGroup.ID; //保存当前选择对象的GUIDif (CsGroup != null) {if (CsGroup.DownLevelID.HasValue) {//如果降档ID有值,则默认显示,如果没有,则显示为空GetExceptCMBSelect();//刷新下拉列表,先刷新,再赋值给默认值StrCMBselectValue = CsGroup.DownLevelID.ToString(); }else{ LstCSGDownLevelID.Clear(); StrCMBselectValue = string.Empty; } } } }private void Add() { bIsAdd = true;//点击新建分组时,重新获取所有降档ID对应的中文名 GetAllCMBItems(); CsGroup = new CusGroup(); }private void Delete() {if (this.CsGroup.ID == Guid.Empty || CsGroup.ID == null) MessageBox.Show(请选择要删除组别, 提示, MessageBoxButton.OK, MessageBoxImage.@R_772_4045@ion);else{ MessageBoxResult msgResult = MessageBox.Show(string.Format(确定要删除分组【{0}】吗?, CsGroup.Name), 提示, MessageBoxButton.YesNo, MessageBoxImage.@R_772_4045@ion);if (msgResult == MessageBoxResult.Yes) DeleteCusGroup(CsGroup); } }/// <summary>/// 排除当前列的降档ID和对应的Name/// </summary>private void GetExceptCMBSelect() { LstCSGDownLevelID.Clear(); CsGroupsAllMinPrestore = CGS.Get(s => s.IsDelete == 0 && s.MinPrestore <= CsGroup.MinPrestore);foreach (var iDlID in CsGroupsAllMinPrestore) {if (iDlID.ID != CsGroup.ID) //去除当前选择ID对应的NameLstCSGDownLevelID.Add(new ComboBoxDataModel() { Value = iDlID.ID.ToString(), Text = iDlID.Name }); } }/// <summary>/// 获取列表中所有降档ID和对应的Name/// </summary>private void GetAllCMBItems() { LstCSGDownLevelID.Clear();foreach (var iDlID in CsGroupsAll) { LstCSGDownLevelID.Add(new ComboBoxDataModel() { Value = iDlID.ID.ToString(), Text = iDlID.Name }); } }private void ChangeCMBValue(CusGroup cgMinPrestore) { LstCSGDownLevelID.Clear(); List<CusGroup> lstTextChange = new List<CusGroup>(); lstTextChange = CGS.Get(s => s.MinPrestore < cgMinPrestore.MinPrestore);foreach (var iDlID in lstTextChange) { LstCSGDownLevelID.Add(new ComboBoxDataModel() { Value = iDlID.ID.ToString(), Text = iDlID.Name }); } }public void SizeChangedCommand(object obj, SizeChangedEventArgs e) { MessageBox.Show(日了狗); }#endregion} }
View中代码:
<client:BaseWindow x:Class=heyin.ERP.Client.Views.Customer.CusGroupEditwindow xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml xmlns:d=http://schemas.microsoft.com/expression/blend/2008 xmlns:mc=http://schemas.openxmlformats.org/markup-compatibility/2006 xmlns:Interaction=http://schemas.microsoft.com/expression/2010/interactions xmlns:Interactivity=http://schemas.microsoft.com/expression/2010/interactivity xmlns:CommonValidation=clr-namespace:heyin.ERP.Common.Validation;assembly=heyin.ERP.Common xmlns:client=clr-namespace:heyin.ERP.Client mc:Ignorable=d x:Name=CusGroupWindow Title=客户分组 Height=500 Width=800 WindowStartupLocation=CenterOwner Loaded=Window_Loaded MaxBoxEnable=True MinBoxEnable=False > <Interactivity:Interaction.Triggers> <Interactivity:EventTrigger EventName=SizeChanged> <Interaction:CallMethodAction Targetobject={Binding} MethodName=SizeChangedCommand/> </Interactivity:EventTrigger> </Interactivity:Interaction.Triggers> <Grid> <Grid.RowDeFinitions> <RowDeFinition Height=* /> <RowDeFinition Height=50 /> </Grid.RowDeFinitions> <Grid Grid.Row=0> <Grid.ColumnDeFinitions> <ColumnDeFinition Width=1*/> <ColumnDeFinition Width=2*/> </Grid.ColumnDeFinitions> <!-- Left --> <Grid Margin=5,0,5,5> <GroupBox Name=gbGroupData> <GroupBox.HeaderTemplate> <DataTemplate> <WrapPanel Margin={StaticResource WrapPanelMarginForInfo}> <TextBlock Text=客户分组 Height=20 /> <Button Width=20 Height=20 Margin=50,0,0,0 Command={Binding DataContext.BtnChangedCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=GroupBox}} CommandParameter=btnCusGroupAdd Visibility={Binding SaveVisibility,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}> <Image Source=..\..\Resources\Images\16\Add.png /> </Button> <Button Width=20 Height=20 Margin=10,0,0,0 Command={Binding DataContext.BtnChangedCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=GroupBox}} CommandParameter=btnCusGroupDelete Visibility={Binding SaveVisibility,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}> <Image Source=..\..\Resources\Images\16\Clear.png /> </Button> </WrapPanel> </DataTemplate> </GroupBox.HeaderTemplate> <Grid> <Grid Grid.Row=1> <DataGrid ColumnWidth=* SelectedItem={Binding CurrentSelectItem} ItemsSource={Binding CsGroupsAll} AutoGenerateColumns=False IsReadOnly=True > <DataGrid.Columns> <DataGridTextColumn Header=分组编号 Binding={Binding Code} /> <DataGridTextColumn Header=分组名称 Binding={Binding Name} /> </DataGrid.Columns> </DataGrid> </Grid> </Grid> </GroupBox> </Grid> <!-- Right --> <Grid Grid.Column=1 Margin=5> <Grid.RowDeFinitions> <RowDeFinition Height=*/> <RowDeFinition Height=100/> <RowDeFinition Height=130/> </Grid.RowDeFinitions> <!-- 基础信息 --> <Grid> <GroupBox> <GroupBox.Header> <TextBlock Text=基础信息 Height=20/> </GroupBox.Header> <StackPanel> <Grid Margin=0,10> <Grid.ColumnDeFinitions> <ColumnDeFinition Width=* /> <ColumnDeFinition Width=* /> </Grid.ColumnDeFinitions> <TextBox Visibility=Collapsed x:Name=tbErrorCount Text={Binding ErrorCount, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}></TextBox> <WrapPanel Margin={StaticResource WrapPanelMarginForInfo}> <TextBlock Width=60 Margin={StaticResource TextBlockMarginForMostLeft}><Run Text=分组编号 /></TextBlock> <TextBox Name=txtCusGropCrod MaxWidth=150 Width=100 ToolTip={Binding RelativeSource={RelativeSource self},Path=(Validation.Errors).CurrentItem.ErrorContent} Validation.Error=Validation_Error> <TextBox.Text> <Binding Path=CsGroup.Code Mode=TwoWay UpdateSourceTrigger=PropertyChanged ValidatesOnDataErrors=True NotifyOnValidationError=True> <Binding.ValidationRules> <ExceptionValidationRule></ExceptionValidationRule> <CommonValidation:requiredValidationRule MaxLenth=15 ErrorMessage=分组编号 Isrequired=True ValidatesOnTargetUpdated=True /> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox> </WrapPanel> <WrapPanel Margin={StaticResource WrapPanelMarginForInfo} Grid.Column=1> <TextBlock Text=分组名称 Width=60 Margin={StaticResource TextBlockMarginForMostLeft}/> <TextBox Name=txtCusGropName MaxWidth=150 Width=100 ToolTip={Binding RelativeSource={RelativeSource self},Path=(Validation.Errors).CurrentItem.ErrorContent} Validation.Error=Validation_Error> <TextBox.Text> <Binding Path=CsGroup.Name Mode=TwoWay UpdateSourceTrigger=PropertyChanged ValidatesOnDataErrors=True NotifyOnValidationError=True> <Binding.ValidationRules> <ExceptionValidationRule></ExceptionValidationRule> <CommonValidation:requiredValidationRule MaxLenth=15 ErrorMessage=分组名称 Isrequired=True ValidatesOnTargetUpdated=True /> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox> </WrapPanel> </Grid> <Grid> <WrapPanel Margin={StaticResource WrapPanelMarginForInfo}> <TextBlock Margin={StaticResource TextBlockMarginForMostLeft} Width=60 VerticalAlignment=Center><Run Text=分组描述 /></TextBlock> <TextBox x:Name=tbRemark textwrapping=Wrap AcceptsReturn=True VerticalScrollBarVisibility=Visible Width=400 Height=90 ToolTip={Binding RelativeSource={RelativeSource self},Path=(Validation.Errors).CurrentItem.ErrorContent} Validation.Error=Validation_Error> <TextBox.Text> <Binding Path=CsGroup.Description Mode=TwoWay UpdateSourceTrigger=PropertyChanged ValidatesOnDataErrors=True NotifyOnValidationError=True> <Binding.ValidationRules> <ExceptionValidationRule></ExceptionValidationRule> <CommonValidation:requiredValidationRule MaxLenth=300 ErrorMessage=分组描述 ValidatesOnTargetUpdated=True /> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox> </WrapPanel> </Grid> </StackPanel> </GroupBox> </Grid> <!-- 消费相关 --> <Grid Grid.Row=1 Margin=0,10,0,10> <Grid> <GroupBox> <GroupBox.Header> <TextBlock Text=消费相关/> </GroupBox.Header> <Grid Margin=0,10> <Grid.ColumnDeFinitions> <ColumnDeFinition Width=*/> <ColumnDeFinition Width=*/> </Grid.ColumnDeFinitions> <WrapPanel Margin={StaticResource WrapPanelMarginForInfo}> <TextBlock Text=消费积分 Width=60 Height=20 Margin={StaticResource TextBlockMarginForMostLeft} /> <TextBox Name=txtCusGropJF MaxWidth=150 Width=100 Text={Binding CsGroup.PointConversion, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged} /> </WrapPanel> <WrapPanel Grid.Column=1 Margin={StaticResource WrapPanelMarginForInfo} HorizontalAlignment=Left VerticalAlignment=Center> <CheckBox Name=cbCash Margin=0,0,5,0 IsChecked={Binding CsGroup.IsCash}/> <TextBlock Text=开通预存或储值时禁止现金交易 /> </WrapPanel> </Grid> </GroupBox> </Grid> </Grid> <!-- 预存相关 --> <Grid Grid.Row=2> <GroupBox> <GroupBox.Header> <TextBlock Text=预存相关/> </GroupBox.Header> <StackPanel> <Grid Margin=0,10> <Grid.ColumnDeFinitions> <ColumnDeFinition Width=*/> <ColumnDeFinition Width=*/> </Grid.ColumnDeFinitions> <WrapPanel Margin={StaticResource WrapPanelMarginForInfo}> <TextBlock Width=80 Margin={StaticResource TextBlockMarginForMostLeft} ><Run Text=预存最低充值/></TextBlock> <TextBox MaxWidth=150 Width=100 Text={Binding CsGroup.MinPrestore, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged} /> </WrapPanel> <WrapPanel Grid.Column=1 Margin={StaticResource WrapPanelMarginForInfo}> <TextBlock Width=80 Text=金额低缺报警 Margin={StaticResource TextBlockMarginForMostLeft} /> <TextBox MaxWidth=550 Width=100 Text={Binding CsGroup.Alarm,Mode=TwoWay} /> </WrapPanel> </Grid> <Grid Margin=0,5> <WrapPanel Margin={StaticResource WrapPanelMarginForInfo}> <TextBlock Width=190 Text=预存金额未达到最低要求时降档至 Margin={StaticResource TextBlockMarginForMostLeft}/> <ComboBox MaxWidth=150 Width=100 SelectedValue={Binding StrCMBselectValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged} displayMemberPath=Text SelectedValuePath=Value ItemsSource={Binding LstCSGDownLevelID, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged} /> </WrapPanel> </Grid> </StackPanel> </GroupBox> </Grid> </Grid> </Grid> <!-- bottom --> <Grid Grid.Row=2> <WrapPanel HorizontalAlignment=Center VerticalAlignment=Center Margin={StaticResource WrapPanelMarginForInfo}> <Button Margin=1 Command={Binding BtnChangedCommand} CommandParameter=btnCusGroupSave Background=#fc8530 Style={StaticResource SaveButtonStyle} Visibility={Binding SaveVisibility,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged} > <TextBlock Text=保存 FontWeight=Bold FontSize=16></TextBlock> </Button> </WrapPanel> </Grid> </Grid> </client:BaseWindow>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。