c# - 将 WPF CheckBox.IsChecked 绑定到列表
问题描述
假设我有几个 CheckBox,在 ViewModel 中有一个字符串列表。
public List<string> Checks { get; set; }
我的目标是以这样的方式将我的复选框绑定到列表,当 Checkbox 1 被选中时,“Check 1”将被添加到列表中,当它被取消选中时,“Check 1”将被删除,依此类推每个 CheckBox .
我试图用 ValueConverter 做到这一点:
public class CheckBoxToListConverter : IValueConverter
{
List<string> bound;
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bound = value as List<string>;
if (bound.Contains(parameter.ToString()))
return true;
else
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
bool isChecked = (bool)value;
if (isChecked)
{
bound.Add(parameter.ToString());
return true;
}
else
{
bound.Remove(parameter.ToString());
return false;
}
}
}
然后我对我的复选框进行了以下绑定:
<CheckBox Content="Check 1" IsChecked="{Binding Checks, Converter={StaticResource MyConverter}, ConverterParameter='Check 1'}" />
<CheckBox Content="Check 2" IsChecked="{Binding Checks, Converter={StaticResource MyConverter}, ConverterParameter='Check 2'}" />
<CheckBox Content="Check 3" IsChecked="{Binding Checks, Converter={StaticResource MyConverter}, ConverterParameter='Check 3'}" />
<CheckBox Content="Check 4" IsChecked="{Binding Checks, Converter={StaticResource MyConverter}, ConverterParameter='Check 4'}" />
这实际上有效,参数会相应地从列表中添加和删除。但是当我选中/取消选中复选框时,它们周围会出现红色边框,这绝对表明有些事情是不正确的:
是什么导致了这个错误,我怎样才能以正确的方式完成这个任务?
解决方案
目标属性 ( ChechBox.IsChecked
) 具有bool?
类型。源属性 ( Checks
) 具有List<string>
类型。
Convert
转换器返回方法,bool
与IsChecked兼容。
ConvertBack
应该返回List<string>
:
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
bool isChecked = (bool)value;
if (isChecked)
{
bound.Add(parameter.ToString());
}
else
{
bound.Remove(parameter.ToString());
}
return bound;
}
推荐阅读
- amazon-web-services - 具有 ec2 源的 Cloudfront
- c++ - 如何将文本文件添加到游戏中,以便它可以跟踪一个人的分数
- c - C语言的问题,我不明白错误
- ruby - 推送 Ruby gem 时出错(凭证“未找到”)
- xcode - 应用程序在设备和 Mac Sim 上构建和运行,无需手机模拟 [M1]
- javascript - 当用户停止输入搜索框时执行 api 请求
- c# - C#编码输入输出问题
- javascript - 如何将此动态 index.html 页面转换为 React 页面并将其连接到同一个 Nodejs express 页面?
- php - 检查客户是否购买了东西并将产品添加到 WooCommerce 中的购物车
- python - Pandas 多页 concat 和多维石斑鱼