C# 将多个复选框绑定到ViewModel中的单个属性
我想将多个复选框项(IsChecked属性)绑定到ViewModel中的单个属性 ViewModel属性称为SelectedWeekdays(int),是所有选定工作日的总和。其思想是,工作日值的每一个可能组合都将始终产生唯一的和。工作日在枚举中定义如下: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 =
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>