Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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# 将多个复选框绑定到ViewModel中的单个属性_C#_Wpf_Xaml_Mvvm - Fatal编程技术网

C# 将多个复选框绑定到ViewModel中的单个属性

C# 将多个复选框绑定到ViewModel中的单个属性,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我想将多个复选框项(IsChecked属性)绑定到ViewModel中的单个属性 ViewModel属性称为SelectedWeekdays(int),是所有选定工作日的总和。其思想是,工作日值的每一个可能组合都将始终产生唯一的和。工作日在枚举中定义如下: public enum Weekdays { Monday = 1 Tuesday = 2 Wednesday = 4 Thursday = 8 Friday = 16 Saturday =

我想将多个复选框项(IsChecked属性)绑定到ViewModel中的单个属性

ViewModel属性称为SelectedWeekdays(int),是所有选定工作日的总和。其思想是,工作日值的每一个可能组合都将始终产生唯一的和。工作日在枚举中定义如下:

public enum Weekdays
{
    Monday = 1
    Tuesday = 2
    Wednesday = 4
    Thursday = 8
    Friday = 16
    Saturday = 32
    Sunday = 64
}
例如,如果在视图中选择了星期二和星期四,则ViewModel属性值应为10

同样,如果ViewModel属性更改(例如更改为3),则应选中星期一和星期二的复选框


我已经看过多绑定,但似乎我只能用它将一个复选框绑定到多个值。你能给我指出正确的方向吗?

这对你有用吗?我没有实现
ConvertBack
。这应该很容易

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;

        SelectedWeekday = Weekdays.Tuesday;
    }

    private Weekdays _selectedWeekday;
    public Weekdays SelectedWeekday
    {
        get { return _selectedWeekday; }
        set
        {
            _selectedWeekday = value;
            if(PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs("SelectedWeekday"));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

[Flags]
public enum Weekdays
{
    Monday = 1,
    Tuesday = 2,
    Wednesday = 4,
    Thursday = 8,
    Friday = 16,
    Saturday = 32,
    Sunday = 64
}

public class WeekdayConverter : IValueConverter, INotifyPropertyChanged
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var day = (Weekdays)value;
        if ((day & Weekday) != 0)
            return true;
        return false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        //Implement convertback
        throw new NotImplementedException();
    }

    private Weekdays _weekday;
    public Weekdays Weekday
    {
        get { return _weekday; }
        set
        {
            _weekday = value;
            if(PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs("Weekday"));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}
XAML:



您可能可以使用,但我已经有一段时间没有使用WPF了。您是否考虑过使用链接到所有复选框的单个onClick或valueChanged事件?是否也可以添加convert back?我希望能够选择多个复选框,而不仅仅是一个。
<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:view="clr-namespace:WpfApplication2"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <view:WeekdayConverter x:Key="MondayConverter" Weekday="Monday"></view:WeekdayConverter>
        <view:WeekdayConverter x:Key="TuesdayConverter" Weekday="Tuesday"></view:WeekdayConverter>
    </Window.Resources>
    <StackPanel>
        <CheckBox Content="Monday" IsChecked="{Binding SelectedWeekday, Converter={StaticResource MondayConverter}}" />
        <CheckBox Content="Tuesday" IsChecked="{Binding SelectedWeekday, Converter={StaticResource TuesdayConverter}}" />
    </StackPanel>
</Window>