2015-02-25 6 views
0

Я новичок в WPF. У меня есть кнопка на моем главном окнеКак связать кнопку управления

<Button Grid.Row="1" x:Name="btnSelect" Command="{Binding SaveCommand}" 
     Content="Select" 
    IsEnabled="{Binding CanExec,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 

и в myViewModel

private bool _canExecute; 
    private ICommand saveCommand; 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 
      CreateSaveCommand(); 

    } 
    private void CreateSaveCommand() 
    { 
     this.saveCommand = new DelegateCommand<object>(this.OnSaveClick, this.CanSaveExecute); 
    } 
    public ICommand SaveCommand 
    { 
     get { return this.saveCommand; } 
    } 
    private void OnSaveClick(object arg) 
    { 


    } 
    private bool CanSaveExecute(object arg) 
    { 
     return CanExec; 

    } 

    public bool CanExec 
    { 

     get { return _canExecute; } 
     set { _canExecute = value; OnPropertyChanged("CanExec"); } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChanged(string p) 
    { 
     if (PropertyChanged == null) 
      PropertyChanged(this, new PropertyChangedEventArgs(p)); 
    } 

Но кнопка всегда остаются disabled..What мне не хватает ??

+0

Ничто не устанавливает CanExec в true? поэтому ваша кнопка всегда отключена? – user1

+0

Примечание: значение Boolean в C# по умолчанию является ложным. –

+0

Пожалуйста, покажите свою реализацию 'OnPropertyChanged'. – Sheridan

ответ

-1

Значение по умолчанию для Bool - «False», поэтому ваш CanExec возвращает «False», а ваша кнопка отключена.

1

Ваша проблема заключается в вашей реализации метода OnPropertyChanged ... в настоящее время, это событие будет только дозвонились если это null, что, конечно, вызовет Exception. Попробуйте вместо этого:

private void OnPropertyChanged(string p) 
{ 
    if (PropertyChanged != null) 
     PropertyChanged(this, new PropertyChangedEventArgs(p)); 
} 

UPDATE >>>

Ваш Binding Path также неправильно, но это не остановит его от работы ... это должно быть так:

<Button Grid.Row="1" x:Name="btnSelect" Command="{Binding SaveCommand}" 
    Content="Select" /> 

Обратите внимание, что ICommand.CanExecuteне необходимо установить в собственность IsEnabled вручную ... The Framework сделают это для нас.

+0

Это не работает на моей стороне I Я устанавливаю значение CanExec в true в другой части моего кода, который я могу видеть с помощью отладчика. Правильно ли привязка? – Rohit

+0

Я добавил реализацию SaveCommand – Rohit

+0

Вы возитесь? Теперь 'CanExec' всегда' false' ... что вы делаете? Просто 'return true' из' CanSaveExecute' пока. – Sheridan

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