2013-02-12 3 views
4

Я пытаюсь включить и отключить кнопку в пользовательском элементе управления WPF (PRISM) на основе данных, введенных пользователем.Prism Делегат не активирует команду

In the constructor I do 
SubmitCommand = new DelegateCommand<object>(OnSubmit, CanSubmit); 


public ICommand SubmitCommand { get; private set; } 

private void OnSubmit(object arg) 
{ 
    _logger.Log(arg.ToString()); 
} 

private bool CanSubmit(object arg) 
{ 
    return Title.Length > 0; 
} 

private string _title=""; 

public string Title 
{ 
get { return _title; } 
set 
{ 
    if (_title != value) 
    { 
      _title = value; 
     this.RaisePropertyChanged(); 
    } 
} 
} 

Я связала SubmitCommand в Xaml ниже

<Button Content="Submit" Width="100" Command="{Binding Path=SubmitCommand}" CommandParameter="{Binding ElementName=TitleText, Path=Text}" /> 

Проблема есть когда значение изменяется название, кнопка не получает включен. Может быть, я чего-то не хватает. Спасибо за вашу помощь!

ответ

5

Похоже, что вам нужно поднять CanExecuteChanged событие по вашей команде. Для получения дополнительной информации см. http://wpftutorial.net/DelegateCommand.html и http://msdn.microsoft.com/en-us/library/system.windows.input.icommand.canexecutechanged.aspx

Обратите внимание, что первая ссылка связана с реализацией DelegateCommand и, вероятно, не является тем, что вы на самом деле используете. Для призмы DelegateCommand вам просто нужно вызвать метод RaiseCanExecuteChanged(), когда вы хотите определить, должна ли кнопка быть повторно подключена.

Удачи вам!

Nate

+0

Благодаря Nate. Мне просто нужно было вызвать RaiseCanExecuteChanged, как вы сказали. – isakavis

0

Добавить:

SubmitCommand.RaiseCanExecuteChanged(); 

После:

this.RaisePropertyChanged(); 
+0

Спасибо за помощь Ллойд. Я не мог использовать SubmitCommand напрямую, чтобы поднять в качестве SubmitCommand в приведенном выше примере ICommand. Я изменил код, чтобы выполнить то, что вы сказали, используя .RaiseCanExecuteChanged(); – isakavis

Смежные вопросы