[英]Binding WPF CheckBox.IsChecked to a list
假設我有幾個復選框,在 ViewModel 中我有一個字符串列表。
public List<string> Checks { get; set; }
我的目標是以這樣的方式將我的復選框綁定到列表中,當復選框 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;
}
}
}
然后我做了以下綁定到我的 CheckBoxes:
<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'}" />
這實際上可以相應地從列表中添加和刪除參數。 但是當我選中/取消選中 CheckBoxes 時,它們周圍會出現紅色邊框,這絕對表明有些地方不對勁:
是什么導致了這個錯誤,我怎樣才能以正確的方式完成這個任務?
目標屬性( ChechBox.IsChecked
)有bool?
類型。 源屬性 ( Checks
) 具有List<string>
類型。
Convert
器的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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.