C# MVVM-使用组合框设置datagrid包含标志枚举值
如何绑定Combobox以使用复选框和标签标记枚举值 例如,我有周天数的标志枚举:C# MVVM-使用组合框设置datagrid包含标志枚举值,c#,wpf,mvvm,binding,wpf-controls,C#,Wpf,Mvvm,Binding,Wpf Controls,如何绑定Combobox以使用复选框和标签标记枚举值 例如,我有周天数的标志枚举: [Flags] public enum WeekDays { None = 0, Sunday = 1, Monday = 2, Tuesday = 4, Wednesday = 8, Thursday = 16, Friday = 32, Saturday = 64 } 人员类别: public class Worker : ViewMo
[Flags]
public enum WeekDays
{
None = 0,
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64
}
人员类别:
public class Worker : ViewModelBase
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; RaisePropertyChanged(() => Name); }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; RaisePropertyChanged(() => Age); }
}
private WeekDays _workingDays;
public WeekDays WorkingDays
{
get { return _workingDays; }
set { _workingDays = value; RaisePropertyChanged(() => WorkingDays); }
}
}
和my ViewModel包含工作日和集合工作日的集合(带文本的枚举):
公共类VM:ViewModelBase
{
公共虚拟机()
{
EnumWrapperCollection.Add(新的WorkerNumWrapper(){Name=“Sunday”,BitEnum=WeekDays.Sunday});
EnumWrapperCollection.Add(新的WorkerNumWrapper(){Name=“Monday”,BitEnum=WeekDays.Monday});
EnumWrapperCollection.Add(新的WorkerNumWrapper(){Name=“星期二”,BitEnum=WeekDays.星期二});
EnumWrapperCollection.Add(新的WorkerNumWrapper(){Name=“星期三”,BitEnum=WeekDays.星期三});
EnumWrapperCollection.Add(新的WorkerNumWrapper(){Name=“星期四”,BitEnum=WeekDays.星期四});
添加(新的WorkerNumWrapper(){Name=“Friday”,BitEnum=WeekDays.Friday});
EnumWrapperCollection.Add(新的WorkerNumWrapper(){Name=“Saturday”,BitEnum=WeekDays.Saturday});
添加(new Worker(){Name=“Steve”,年龄=34岁,工作日=WeekDays.Sunday | WeekDays.Monday});
添加(new Worker(){Name=“John”,年龄=52,工作日=工作日。星期三|工作日。星期五});
选择worker=Workers.FirstOrDefault();
}
私有ObservableCollection_enumsWrapperCollection=新ObservableCollection();
公共ObservableCollection EnumWrapperCollection
{
获取{return\u enumsWrapperCollection;}
设置{u enumsWrapperCollection=value;}
}
私有ObservableCollection_workers=新ObservableCollection();
公职人员
{
获取{return\u workers;}
设置{u workers=value;}
}
私人工人(u selectWorker);;
公共工作者
{
获取{return\u selectWorker;}
设置{u selectWorker=value;RaisePropertyChanged(()=>selectWorker);}
}
}
我的xmal窗口包含一个Worker数据网格和一个包含EnumWrapperCollection集合的workdays的组合框。带有组合框的每一行worker都需要包含所有的工作日,但只检查worker的“WorkingDays”。此外,我希望用户能够检查和取消检查工作日,并通过这样做来更改值
窗口应如下所示:
有什么想法吗?您已经尝试过什么?我尝试创建一个组合框,其中所有值都是“EnumWrapperCollection”(星期日、星期一等)。ItemTemplate/DataTemplate是复选框和标签。标签设置为名称(星期日、星期一等),复选框由转换器设置,转换器获取已选择的值(工作者)和WorkerNumWrapper的位图,如果SelectWorker.WorkDays包含WorkerNumWrapper处的标志,则返回true,否则返回false。复选框中的转换将获得相同的值,并根据当前选择更改SelectedWorker.WorkDays。
public class VM : ViewModelBase
{
public VM()
{
EnumWrapperCollection.Add(new WorkerEnumWrapper() { Name = "Sunday", BitEnum = WeekDays.Sunday });
EnumWrapperCollection.Add(new WorkerEnumWrapper() { Name = "Monday", BitEnum = WeekDays.Monday });
EnumWrapperCollection.Add(new WorkerEnumWrapper() { Name = "Tuesday", BitEnum = WeekDays.Tuesday });
EnumWrapperCollection.Add(new WorkerEnumWrapper() { Name = "Wednesday", BitEnum = WeekDays.Wednesday });
EnumWrapperCollection.Add(new WorkerEnumWrapper() { Name = "Thursday", BitEnum = WeekDays.Thursday });
EnumWrapperCollection.Add(new WorkerEnumWrapper() { Name = "Friday", BitEnum = WeekDays.Friday });
EnumWrapperCollection.Add(new WorkerEnumWrapper() { Name = "Saturday", BitEnum = WeekDays.Saturday });
Workers.Add(new Worker() { Name = "Steve", Age = 34, WorkingDays = WeekDays.Sunday | WeekDays.Monday });
Workers.Add(new Worker() { Name = "John", Age = 52, WorkingDays = WeekDays.Wednesday | WeekDays.Friday });
SelectWorker = Workers.FirstOrDefault();
}
private ObservableCollection<WorkerEnumWrapper> _enumsWrapperCollection = new ObservableCollection<WorkerEnumWrapper>();
public ObservableCollection<WorkerEnumWrapper> EnumWrapperCollection
{
get { return _enumsWrapperCollection; }
set { _enumsWrapperCollection = value; }
}
private ObservableCollection<Worker> _workers = new ObservableCollection<Worker>();
public ObservableCollection<Worker> Workers
{
get { return _workers; }
set { _workers = value; }
}
private Worker _selectWorker;
public Worker SelectWorker
{
get { return _selectWorker; }
set { _selectWorker = value; RaisePropertyChanged(() => SelectWorker); }
}
}