簡體   English   中英

將 WPF CheckBox.IsChecked 綁定到列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM