Я вижу несколько других сообщений об этом, но я не могу точно понять, как заставить это работать должным образом для моего использования.
Вот что у меня в двух словах.
У меня есть два комбобокса - роль и положение.
У меня есть оба эти элемента, привязанные к коллекции ObservableCollection, значения Enum которой преобразованы в строки, загруженные в нее при создании экземпляра.
<ComboBox x:Name="empRoleCB" ItemsSource="{Binding Role}" SelectedItem="{Binding RoleStr}"/>
<ComboBox x:Name="empPositionCB" ItemsSource="{Binding Pos}" SelectedItem="{Binding PosStr}"/>
В моей ViewModel:
public abstract class EmployeeMenuVMBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected bool SetProperty<T>(ref T field, T newValue, [CallerMemberName] string propertyName = null)
{
if(!EqualityComparer<T>.Default.Equals(field, newValue))
{
field = newValue;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
return true;
}
return false;
}
}
class EmployeeMenuVM : EmployeeMenuVMBase
{
private ObservableCollection<string> _pos = new ObservableCollection<string>(Enum.GetNames(typeof(Global.Positions)));
private ObservableCollection<string> _role = new ObservableCollection<string>(Enum.GetNames(typeof(Global.Roles)));
public ObservableCollection<string> Pos { get => _pos; }
public ObservableCollection<string> Role { get => _role; }
public string RoleStr
{
get => _roleStr;
set => SetProperty(ref _roleStr, value);
}
public string PosStr
{
get => _posStr;
set => SetProperty(ref _posStr, value);
}
}
Я хочу, чтобы при выборе Роли на основе этого выбора отображались только определенные Позиции. Например, если я выбираю «Обслуживание клиентов» в качестве роли, то позиция должна содержать только «Менеджер», «CSS» и «Нет». Если роль - «Администратор», то позиция должна содержать только «Нет» и т. Д. И т. Д.
Моя борьба заключается в том, как правильно отфильтровать это. Я вижу что-то с использованием CollectionViewSource, но я не уверен, как заставить это работать с моим примером.
У меня есть 5 ролей, и у каждой роли будет свой список должностей, которые нужно показать.
Каков наилучший способ заставить эту работу работать с дополнительным кодом MINIMAL или XAML?
Одна из вещей, которые мне действительно не нравятся в WPF, это то, что, казалось бы, простые вещи требуют огромного количества кода, чтобы они много раз работали правильно.