Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将WPF CheckBox.IsChecked绑定到列表_C#_Wpf_Data Binding - Fatal编程技术网

C# 将WPF CheckBox.IsChecked绑定到列表

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

假设我有几个复选框,在ViewModel中有一个字符串列表

我的目标是以这样的方式将我的复选框绑定到列表,当复选框1被选中时,复选框1将被添加到列表中,当复选框被选中时,复选框1将被删除,依此类推

我尝试使用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?类型源属性检查具有列表类型

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;
}