установить IsEnabled = false кнопку в Silverlight - PullRequest
1 голос
/ 24 января 2020

У меня есть следующий код в классе ViewModel, в конструкторе, где я определяю, что кнопки всегда включены = false при запуске формы ...

 public partial class EditarConceptoWindow : ChildWindow
 {
  public EditarConceptoWindow(string documentoId)
  {
     InitializeComponent();
     viewModel.Saved += new EventHandler<Microsoft.Practices.Prism.Events.DataEventArgs<bool>>(ViewModel_Saved);
    viewModel.Calculation += new EventHandler<Microsoft.Practices.Prism.Events.DataEventArgs<bool>>(ViewModel_Calculation);
    this.DataContext = viewModel;

    BtnCalcular.IsEnabled = false;
    BtnObtenerTCRM.IsEnabled = false;
    ....... rest of code 

В проверенном событии проверки при установке флажка «Выбрано» для него должно быть установлено значение «истина» в зависимости от того, был ли выбран конкретный элемент комбинированного списка;

   private void cbAgregarManual_Checked(object sender, RoutedEventArgs e)
     {
      if (this.ComboConcepto.SelectedValue.ToString() == "DPI")
        {
            BtnCalcular.IsEnabled = true;
            BtnObtenerTCRM.IsEnabled= true;
        }

    }

Это необходимо сделать, если и только если флажок установлен и значение DPI выбрано в выпадающем списке.

Но поведение кнопок заключается в том, что при запуске формы они всегда IsEnabled = true, и если элемент управления флажок нажат, если он работает, но я не могу найти причину, потому что только до тех пор, пока я не установлю флажок, он работает, в XAML есть некоторые элементы управления (например, TextBoxes, а также кнопки) с этой директивой.

IsEnabled="{Binding ElementName=cbAgregarManual, Path=IsChecked }"

1 Ответ

0 голосов
/ 24 января 2020

Я предлагаю вам централизовать логи c включения в одном свойстве, чтобы избежать этого несоответствия логики c установки путаницы.

В этом новом свойстве он будет использовать INotifyPropertyChanged для уведомления этого изменения, но вызваны из других свойств. Таким образом, чтобы подвести итог, когда любое из связанных значений изменяется, они делают вызов уведомления для свойства logi c; этот процесс обеспечивает правильное включение / отключение элемента управления.


Пример

Например, этот псевдокод, где я проверяю три различных других свойства:

public bool IsEnabledCombo { get { return ClickStatus 
                                       && OtherStatus 
                                       && !string.IsNullOrEmpty( UserText); }

public bool ClickStatus { get { return _clickStatus; } 
                         set { _clickStatus = value; 
                               NotifyPropertyChanged("ClickStatus");
                               NotifyPropertyChanged("IsEnabledCombo");
                             }}

 public bool OtherStatus { get { return _otherStatus; } 
                         set { _clickStatus = value; 
                               NotifyPropertyChanged("OtherStatus");
                               NotifyPropertyChanged("IsEnabledCombo");
                             }}   
  public string UserText { ... 
                          set { _userText = value;                            
                               NotifyPropertyChanged("UserText");
                               NotifyPropertyChanged("IsEnabledCombo");

Привязать свой элемент управления как таковой

  IsEnabled="{Binding IsEnabledCombo }"

Поэтому, когда одно из связанных значений может измениться, они также вызывают NotifyPropertyChanged("IsEnabledCombo");, и статус элемента управления обновляется автоматически.


В своем блоге я привел еще один пример цепочки уведомлений, аналогичный:

Xaml: стратегия создания и загрузки главной страницы ViewModel для упрощения привязки

...