Кто-нибудь знает, почему конкретный тип MVVM Light RelayCommand генерирует, чтобы его canExecute всегда разрешал false для привязки? Чтобы получить правильное поведение, мне пришлось использовать объект, а затем преобразовать его в нужный тип.MVVM Light canExecute всегда false с RelayCommand <bool> not RelayCommand <object>
ПРИМЕЧАНИЕ. Функция canExecute была упрощена до логического значения для проверки блока, который не работает, и обычно это свойство CanRequestEdit.
Не работает:
public ICommand RequestEditCommand {
get {
return new RelayCommand<bool>(commandParameter => { RaiseEventEditRequested(this, commandParameter); },
commandParameter => { return true; });
}
}
Работы:
public ICommand RequestEditCommand {
get {
return new RelayCommand<object>(commandParameter => { RaiseEventEditRequested(this, Convert.ToBoolean(commandParameter)); },
commandParameter => { return CanRequestEdit; });
}
}
XAML:
<MenuItem Header="_Edit..." Command="{Binding RequestEditCommand}" CommandParameter="true"/>
Я думаю, что CommandParameter собирается как строка. – sexta13
Вы правы, CommandParameter идет как строка. Как вы думаете, что это повлияет на canExecute, который жестко закодирован, чтобы вернуть true? – Rock
странно ... вы можете попробовать ввести функцию? что-то вроде: RelayCommand x = new RelayCommand (req => {string s = "true";}, req => canExecute()); частный bool canExecute() { return true } –
sexta13