Допустим, у меня есть несколько CheckBox, и в ViewModel у меня есть список строк.
public List<string> Checks { get; set; }
Моя цель - привязать мои флажки к списку таким образом, чтобы при установке флажка 1 «Проверка 1» выполнялась будет добавлен в список, и когда он будет снят, «Проверка 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'}" />
Это на самом деле работает параметры добавляются и удаляются из списка соответственно. Но когда я проверяю / убираю флажки, они получают красную рамку вокруг них, что наиболее определенно указывает на то, что что-то не так:
Что вызывает эту ошибку и как мне правильно решить эту задачу?