WPF listView下添加CheckBox的ViewModel触发事件

WPF listView下添加CheckBox的ViewModel触发事件

在开发中遇到需要在listView下添加CheckBox的选中直接触发对应的数据加载,而且是在ViewModel中操作,发现添加触发器并不生效。最后通过命令嵌套解决该问题

代码部分:
xaml:

<ListView.Resources>

</ListView.Resources>
<ListView.View>

<GridView.Columns>

<GridViewColumn.HeaderTemplate>





</GridViewColumn.HeaderTemplate>
<GridViewColumn.CellTemplate>



</GridViewColumn.CellTemplate>



<GridViewColumn.CellTemplate>





</GridViewColumn.CellTemplate>


</GridView.Columns>

</ListView.View>

后台代码:
public class GasInformation : WpfBaseControlViewModel, IGasInformationViewModel
{
private bool isCheck;
private string gas;
private bool isDraw;
private string maxFlow;
///
/// GasInformation Filed
///
public bool IsCheck
{
get { return isCheck; }
set { Set(() => IsCheck, ref isCheck, value); }
}
///
/// GasInformation Filed
///
public string Gas
{
get { return gas; }
set { Set(() => Gas, ref gas, value); }
}
///
/// GasInformation Filed
///
public string MaxFlow
{
get { return maxFlow; }
set { Set(() => MaxFlow, ref maxFlow, value); }
}
///
/// GasInformation Filed
///
public bool IsDraw
{
get { return isDraw; }
set { Set(() => IsDraw, ref isDraw, value); }
}
///
///
///
public Action CallBackAction { get; set; }
///
/// Command to DrawRadioCommand of PartialPressureScreen
///
public ICommand CheckBoxCommand
{
get { return new DelegateCommand { CommandActionParam = ExecutionDrawRadioCommand }; ; }
}
private void ExecutionDrawRadioCommand(object obj)
{
CallBackAction?.Invoke();
}

}

对应接口实现:
GasDataWrapper.Add(new GasInformation { Gas = “SiCL4”,MaxFlow = “0” ,CallBackAction = callBackAction });
callBackAction 中操作对应的实际数据加载。

问题解决思路

开始的时候发现添加触发器一直无法生效,后来找到问题原因:因为当前操作的对象是在GasDataWrapper对象中,对应的触发器命令并不在该对象的类中存在该属性,自然无法触发。
之后处理问题,那么就在该对象中添加对应的事件进行触发。注册对应的事件:CheckBoxCommand,之后添加委托,然后使用事件CallBackAction 进行处理。
///
///
///
public Action CallBackAction { get; set; }
///
/// Command to DrawRadioCommand of PartialPressureScreen
///
public ICommand CheckBoxCommand
{
get { return new DelegateCommand { CommandActionParam = ExecutionDrawRadioCommand }; ; }
}
private void ExecutionDrawRadioCommand(object obj)
{
CallBackAction?.Invoke();
}
最后在接口的实现中加载该GasDataWrapper对象时,callBackAction()方法就是每一个对象点击CheckBox时进行触发的操作事件。listView中添加触发器不生效其实就是对象所属范围问题。需要格外注意。

上一篇:WPF性能优化


下一篇:C# wpf style中实现ListBox自动生成序号