У меня проблемы с получением RelayCommand
для правильного включения / отключения подключенного элемента управления.
У меня есть элемент EventToCommand
, прикрепленный к кнопке.Команда привязана к ViewModel.Сначала кнопка отключена (ожидаемое поведение), но я не могу получить логику CanExecute
для проверки ее значения.Когда CurrentConfigFile
установлено и существует, кнопка должна быть включена.Я выполнил код и проверил значение файла в отладке, чтобы убедиться, что он установлен, но элемент управления по-прежнему отключен.Я пробовал CommandManager.InvalidateRequerySuggested()
и command.RaiseCanExecuteChanged()
, но не включится.
Я задавался вопросом, не работают ли лямбды правильно для поведения CanExecute
(даже если их используют примеры) или что поведение CanExecute
должно быть привязано к другому элементу.
Вот мой код:
// The FileInfo being checked for existence before the button should be enabled
public const string CurrentConfigFilePN = "CurrentConfigFile";
public FileInfo CurrentConfigFile
{
get
{
return _currentConfigFile;
}
set
{
if (_currentConfigFile == value)
{
return;
}
var oldValue = _currentConfigFile;
_currentConfigFile = value;
// Update bindings, no broadcast
RaisePropertyChanged(CurrentConfigFilePN);
}
}
public MainViewModel()
{
// snip //
SaveCommand = new RelayCommand(SaveConfiguration,
() => CurrentConfigFile != null && CurrentConfigFile.Exists);
}
private void SaveConfiguration()
{
// export model information to xml document
ExportXMLConfiguration(CurrentConfigFile);
}
и разметка
<Button x:Name="SaveButton" Content="Save" Width="75" Margin="20,5">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<GalaSoft:EventToCommand x:Name="SaveETC"
Command="{Binding SaveCommand}"
MustToggleIsEnabledValue="true" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
Обновление:
Согласно предложению Исака Саво, я связал RelayCommand
непосредственно к кнопке с помощью
<Button x:Name="SaveButton" Content="Save" Width="75" Margin="20,5"
Command="{Binding SaveCommand}"/>
, и она начала отключаться и правильно включаться при установке FileInfo
.Думаю, я должен помнить, чтобы не исправить то, что не сломано!