Я хотел бы передать параметр, определенный в XAML (View) моего приложения, в класс ViewModel с помощью RelayCommand. Я последовал за Джошем Смитом превосходную статью о MVVM и реализовал следующее.
Код XAML
<Button
Command="{Binding Path=ACommandWithAParameter}"
CommandParameter="Orange"
HorizontalAlignment="Left"
Style="{DynamicResource SimpleButton}"
VerticalAlignment="Top"
Content="Button"/>
Код ViewModel
public RelayCommand _aCommandWithAParameter;
/// <summary>
/// Returns a command with a parameter
/// </summary>
public RelayCommand ACommandWithAParameter
{
get
{
if (_aCommandWithAParameter == null)
{
_aCommandWithAParameter = new RelayCommand(
param => this.CommandWithAParameter("Apple")
);
}
return _aCommandWithAParameter;
}
}
public void CommandWithAParameter(String aParameter)
{
String theParameter = aParameter;
}
#endregion
Я установил точку останова в методе CommandWithAParameter и заметил, что для параметра "Параметр" установлено значение "Яблоко", а не "Оранжевый" . Это кажется очевидным, поскольку метод CommandWithAParameter вызывается с буквальной строкой "Apple".
Однако, глядя на стек выполнения, я вижу, что "Оранжевый" , параметр CommandParameter, установленный в XAML, является значением параметра для реализации RelayCommand метода интерфейса ICommand Execute.
Это значение параметра в методе ниже стека выполнения - "Оранжевый" ,
public void Execute(object parameter)
{
_execute(parameter);
}
То, что я пытаюсь понять, - это создать свойство RelommCommand ACommandWithAParameter, чтобы он мог вызвать метод CommandWithAParameter с параметром CommandParameter "Orange", определенным в XAML.
Есть ли способ сделать это?
Почему я хочу это сделать? Часть "Локализация на лету" В моей конкретной реализации я хочу создать SetLanguage RelayCommand, который может быть привязан к нескольким кнопкам. Я хотел бы передать два символьных идентификатора языка ( "en", "es", "ja" и т.д.) В качестве параметра CommandParameter и определить их для каждой кнопки "set language", определенной в XAML. Я хочу избежать создания команды SetLanguageToXXX для каждого языка, поддерживающего и жесткого кодирования двух идентификаторов языка символов в каждом RelayCommand в ViewModel.