C# 将WPF CheckBox.IsChecked绑定到列表
假设我有几个复选框,在ViewModel中有一个字符串列表 我的目标是以这样的方式将我的复选框绑定到列表,当复选框1被选中时,复选框1将被添加到列表中,当复选框被选中时,复选框1将被删除,依此类推 我尝试使用ValueConverter执行此操作:C# 将WPF CheckBox.IsChecked绑定到列表,c#,wpf,data-binding,C#,Wpf,Data Binding,假设我有几个复选框,在ViewModel中有一个字符串列表 我的目标是以这样的方式将我的复选框绑定到列表,当复选框1被选中时,复选框1将被添加到列表中,当复选框被选中时,复选框1将被删除,依此类推 我尝试使用ValueConverter执行此操作: public class CheckBoxToListConverter : IValueConverter { List<string> bound; public object Convert(object valu
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?类型源属性检查具有列表类型
converter的Convert方法返回bool,它与IsChecked兼容
ConvertBack应返回列表:
ConvertBack应返回列表:始终返回绑定;是的,这是有道理的,而且它是这样工作的,现在我想起来了,我不知道为什么我会返回真假,谢谢!
<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'}" />
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;
}