MVVM下拉框绑定触发事件
Posted weixin_44543308
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVVM下拉框绑定触发事件相关的知识,希望对你有一定的参考价值。
开发工具与关键技术:MVVM
撰写时间:2021年06月15日
在MVVM中下拉框的绑定跟MVC的下拉框绑定基本一样,只不过在MVVM中要写多一步声明下拉框的属性来接收数据。
首先我们要在DAL层写查询下拉框所要绑定的数据值,一般下拉框的绑定都是单表里面的数据,只要单表查询就可以了,如果想要在下拉框中绑定“请选择项”的话就要去声明一个实体类去写绑定“请选择”,如下:
public static List<PW_Floor> SelectFloor (List<PW_Floor> select)
{
//创建列表对象
List<PW_Floor> list = new List<PW_Floor>();
//创建实体对象
PW_Floor selectVo = new PW_Floor
{
FloorID = 0,
FloorName = “— 请选择 —”
};
//将实体对象添加到对象列表
list.Add(selectVo);
//将数据集添加到对象列表
list.AddRange(select);
return list;
}
然后到DAL层查询中调用“请选择”,如下:
// 查询楼层下拉框
public List<PW_Floor> GetFloor()
{
//查询楼层信息
List<PW_Floor> list = myModel.PW_Floor.ToList();
//调用“请选择”
list = Tool.SelectFloor(list);
return list;
}
再到ViewModel中写下拉框的属性来接收上面的查询方法,再把它放到ViewModel的构造函数中调用就可以了,如下:
/// 楼号
private int _floorID { get; set; }
public int FloorID
{
get { return floorID }
set
{
if (_floorID != value)
{
_floorID = value;
OnPropertyChanged(() => FloorID);
}
}
}
// 接收数据的实体
private List<PW_Floor> _floors;
public List<PW_Floor> Floors {
get { return _floors; }
set
{
if (_floors!= value)
{
_floors= value;
OnPropertyChanged(() => Floors);
}
}
}
下拉框的属性和实体也可以简化点来写,就两句话如下(不过连续绑定两个下拉框的最后还是用上面的方法,只是绑定一个的就可以用下面的):
public int FloorID { get; set; }
public List<PW_Floor> Floors { get; set; }
下拉框方法,然后把方法放到ViewModel的构造函数中调用即可。如下
public void LowerLink(){
//楼层 实例化
Floors = new List<PW_Floor>();
//调用Dal的查询方法
Floors = roomDal.GetFloor();
FloorID = 0;//绑定请选 }
上面的单个下拉框绑定下面来看下多个下拉框绑定事件,例如:有第一个下拉框触发第二个、第三个下拉框。实体类绑定“请选择”和DAL的查询方法都和上面单个写法一样,不一样的是在ViewModel中的方法不同,想要选中第一个下拉框触发第二个下拉框要在第一个下拉框中写触发事件
<i:Interaction.Triggers>
<i:EventTrigger EventName=“SelectionChanged”>
<i:InvokeCommandAction Command="{Binding ChangedCommand}" CommandParameter="{Binding ElementName=dgFloor}" ></i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
因为MVVM和WPF有点不同所以事件的绑定也有所不同,WPF的下拉框触发事件直接在ComboBox中写就可以了,但是在MVVM中就不可以直接在ComboBox中写触发事件,要如上面的那样来绑定事件,再去ViewModel中写命令的属性再写触发事件的方法最后调用命名方法就可以,下面是命令的属性:
/// 绑定下拉框触发事件
public ICommand ChangedCommand { get; set; }
/// 楼号下拉框触发事件
public ICommand ChangedCommands { get; set; }
下拉框的触发事件:首先判断选中的值ID是否等于0,不等于0就先连表查询楼层信息再根据楼号ID在楼层表中做父键等于楼号表的主ID再判断是否等于null,不等于null就选中第一个下拉框内容绑定第二个下拉框内容,如下:
第二下拉框绑定就触发第三个下拉框绑定,方法一样如下:
最后到ViewModel的构造函数中调用即可,如下;
//楼层下拉框触发事件 ChangedCommand 命令属性 SelectChanged 命令的方法
ChangedCommand = new DelegateCommand(SelectChanged);
//楼号下拉框触发事件
ChangedCommands = new DelegateCommand(SelectChangeds);
最后的结果如下:
这里我是选中第一个下拉框然后直接触发第二个和第三个下拉框的,所以会看到当你选中第一个的时候后的第二个和第三个下拉框的值也会主动绑定上去。
以上是关于MVVM下拉框绑定触发事件的主要内容,如果未能解决你的问题,请参考以下文章