wpf 将IsChecked绑定到位域

9lowa7mx  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(137)

我有一个这样的bitfield:

[Flags]
public enum EmployeeType
{
    None = 0,
    IsInOffice = 1,
    IsManager = 2,
    IsOnVacation = 4,
    ...
}

我的UI有一个所有员工的列表框,我想实现复选框来过滤列表。这个列表框绑定到一个过滤器属性,如下所示:

public IEnumerable<Employee> FilteredEmployees
    => _employees.Where(e => _regexFilter.IsMatch(e.FullName)
                                && (!EmployeeType.HasFlag(EmployeeType.IsInOffice) || e.IsLoggedIn)
                                && (!EmployeeType.HasFlag(EmployeeType.IsManager) || e.RoleID >= 4)
                                && (!EmployeeType.HasFlag(EmployeeType.IsOnVacation) || TimeRec.GetStatusID(e.ID) == 7))
                 .OrderBy(e => e.FullName);

我现在的问题是,我不能从转换器中得到一个正确的返回值,因为所有标志的当前状态都是未知的,我也不能设法将所有标志的当前状态输入转换器。
我可以激活一个标志,但我无法在不停用或激活其他标志的情况下停用任何标志,这将是意外行为。

vsdwdz23

vsdwdz231#

好像是用这个得到的:
转换器:

if ((bool)value)
    return (EmployeeType)parameter;
else
    return ~(EmployeeType)parameter;

定针器:

if ((int)value > 0)
    _employeeType |= value;
else
    _employeeType &= value;

不是100%肯定,如果这是一个黑客,只是在我的情况下工作,但好吧,它的作品:D

相关问题