У меня есть класс, KeyCombos
, который содержит свойство Modifier Keys
и Keys
:
private ModifierKeys _modifierKeys;
private Key _key;
public ModifierKeys ModifierKeys
{
get { return _modifierKeys; }
set
{
if (_modifierKeys == value)
return;
_modifierKeys = value;
RaisePropertyChanged(nameof(ModifierKeys));
}
}
public Key Key
{
get { return _key; }
set
{
if (_key == value)
return;
_key = value;
RaisePropertyChanged(nameof(Key));
}
}
public KeyCombo(ModifierKeys modifierKeys, Key key)
{
Key = key;
ModifierKeys = modifierKeys;
}
, где RaisePropertyChanged
используется для реализации INotifyPropertyChanged
.
В моем ViewModel
у меня есть свойства, которые связаны с различными комбинациями клавиш, например:
private KeyCombo _firstKeyCombo;
public KeyCombo FirstKeyCombo
{
get { return _firstKeyCombo; }
set
{
if (_firstKeyCombo == value)
return;
_firstKeyCombo = value;
// Validation method called here
RaisePropertyChanged(nameof(FirstKeyCombo));
}
}
И каждая часть KeyCombo
установлена в ViewModel
, т. Е .:
FirstKeyCombo = new KeyCombo(ModifierKeys.Alt, Key.T);
ViewModel также определяет:
public IEnumerable<Key> Keys => _availableKeys;
ObservableCollection<Key> _availableKey; // set to all available keys
public IEnumerable<ModifierKeys> Modifiers => _modifierKeys;
ObservableCollection<ModifierKeys> _modifierKeys; // set to all modifier keys
Затем привязывается в View
к ComboBoxs
:
<StackPanel Orientation="Horizontal" Grid.Row="13" Grid.Column="2">
<ComboBox ItemsSource="Keys"
SelectedItem="{Binding FirstKeyCombo.Key,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"/>
<ComboBox ItemsSource="Modifiers"
SelectedItem="{Binding FirstKeyCombo.ModifierKey,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
Это работает нормально, соответствующие Key
и ModifierKeys
отображаются правильно. Мне нужно обновить FirstKeyCombo
через установщик, когда изменяется либо Key
или ModiferKeys
(проверка по all свойств KeyCombo
в ViewModel). Очевидно, что моя попытка использовать INotifyPropertyChanged
не удалась. Что я должен сделать, чтобы убедиться, что если любое из свойств (ModiferKeys
или Keys
) изменяется с помощью Combobox
, устанавливается FirstKeyCombo
?