Я использую MVVM-Light и у меня отлично работает команда реле, я только что прочитал, что должен реализовывать CanExecuteChanged
и CanExecute
.Хотя я не могу найти хороший пример.
У кого-нибудь есть хороший пример того, как их реализовать.
CanExecute должен возвращать False, когда он не может быть выполнен, но не будетпросто отключите кнопку ??
Когда я выполняю CanExecuteChanged
?
У кого-нибудь есть хорошие примеры использования каждого из них, мой код работает без, но этот блог В сообщении говорится, что я должен реализовывать эти элементы.
Я немного растерялся, так как сказал, что подумал, что просто привяжу свойство Enabled
или что-то к свойству в ViewModel, чтобы я мог отключитькнопка или аналогичный элемент управления?
Любая помощь в понимании была бы очень благодарна.
РЕДАКТИРОВАТЬ
Это то, что у меня сейчас ...Работает, но кнопка физически НЕ ОТКЛЮЧЕНА, только команда не запускается, так как я возвращаю false.Я вызываю CanExecuteMe в конструкторе, чтобы принудительно запустить RaiseCanExecuteChanged ...
Это выполняется в моем конструкторе моей модели представления
this.Page2Command = new RelayCommand(() => this.GoToPage2(), () => CanExecuteMe);
CanExecuteMe = false;
, и вот остальная часть моего кода, я взялэто из примера.
private bool _canIncrement = true;
public bool CanExecuteMe
{
get
{
return _canIncrement;
}
set
{
if (_canIncrement == value)
{
return;
}
_canIncrement = value;
// Update bindings, no broadcast
//RaisePropertyChanged(CanIncrementPropertyName);
Page2Command.RaiseCanExecuteChanged();
}
}
public RelayCommand Page2Command
{
get;
private set;
}
private object GoToPage2()
{
System.Windows.MessageBox.Show("Navigate to Page 2!");
return null;
}
А вот и мой XAML
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="31,77,0,0" x:Name="button1" VerticalAlignment="Top" Width="75" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding Page2Command, Mode=OneWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>