public class ToggleButton : ButtonBase
[Category("Appearance")]
[TypeConverter(typeof(NullableBoolConverter))]
[Localizability(LocalizationCategory.None, Readability = Readability.Unreadable)]
public bool? IsChecked
get { }
set { }
运行时,触发执行 Command
,转换过程中,无法将 CommandParameter
对应的参数由 null
转换为 bool
类型,故而报错。
解决方案是,将 ViewModel
中命令 CheckCmd
中对应的执行函数类型 bool
转换为 bool?
,ViewModel
变更如下:
private ICommand checkCmd;
public ICommand CheckCmd => checkCmd ??= new DelegateCommand<bool?>(CheckStatus);
private void CheckStatus(bool? ischecked)
再次运行,则不再报错。
如果控件有选择事件的话这一在XAML中直接IsChecked=true可能出问题
因为程序编译先执行初始化控件后执行窗体load等事件,所以在XAML中直接IsChecked=true便会在控件加载中便执行选择事件,再执行窗体事件和全局变量,很可能会报错,这时不要在XAML中直接IsChecked=true,而要在窗体load事件中手动写一下代码
最近的一个项目是用MVVM实现,在实现功能的时候,就会有一些东西,和以前有很大的区别,项目中就用到了常用的序号,就是在Datagrid里的一个字段,用checkbox来实现。
既然是MVVM,就要用到ModleView,View和Model三层。
先看一下效果
当然,也可以确定是哪一项被选中了,这个代码里有。
实现这个全选功能,用到了三个DLL文件,分别为GalaSoft.MvvmLi...
先看看效果:
完全采用MVVM的各种绑定。点击表头CheckBox可实现全选和取消全选,选中数据行所有CheckBox时自动选中表头CheckBox,数据行中有未选中的则不会选中表头CheckBox。
demo下载:百度网盘(链接:https://pan.baidu.com/s/1vKmPFMbY6WSN6d0-kvu83w 密码:vk4h)...
<DataGrid Name="DG1" Grid.Row="5" Grid.ColumnSpan="4" ItemsSource="{Binding MyList,Mode=TwoWay}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Width="550" H...
<Window
x:Class="checkboxtest.MainWindow"
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"
/// Value converter between bool and IsChecked property value (bool?)
[ValueConversion(typeof(bool), typeof(bool?))]
public class IsCheckedConverter : IValueConverter
《前言》首先,简单介绍一下,什么是数据绑定?一种用声明的方式将控件和数据绑定在一起的方式。简单来理解一下就是:控件的属性由你绑定的数据来动态判断的方式。《核心前提部分》一个绑定(Binding)关系由四个组件构成: 1) 绑定目标 2) 目标属性 3) 源目标 4) 源属性简言之: 绑定目标就是控件 目标属性就是控件对应的属性 源目标就是数据对象(类对象)...