2012-04-25 2 views
1

Я пишу приложение WPF, и я хотел бы использовать Enum для переменной State.Enum Изменено событие

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

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

Любые предложения?

ответ

2

Если вы используете подход MVVM, я согласен с Дэниелом Уайтом, что вам нужно реализовать INotifyPropertyChanged. Вы должны привязать элемент IsEnabled к вашим элементам управления к свойству ViewModel.

Код:

public class ViewModel : INotifyPropertyChanged 
{ 
     public MyEnum EnumValue 
     { 
      get { return enumValue; } 
      set { 
       enumValue = value; 
       AreControlsEnabled = enumValue == MyEnum.SomeValue; 
      } 
     } 

     public bool AreControlsEnabled 
     { 
      get { return areControlsEnabled; } 
      set { 
       areControlsEnabled = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArg("AreControlsEnabled"); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 
} 

XAML:

<TextBox IsEnabled="{Binding AreControlsEnabled}"/> 
+0

Основываясь на сложности приложения, я думаю, что я просто заколю несколько методов для переключения элементов управления. Далек от элегантности, но не стоит уровня абстракции MVVM или аналогичных шаблонов дизайна. Благодаря! – Ritz

+2

@Ritz Остерегайтесь «мое приложение слишком просто для MVVM»! Приложения часто растут по мере изменения спецификации, и когда это происходит, чем раньше у вас есть MVVM, тем лучше. Даже для самых базовых приложений нет реальных накладных расходов для основной импликации MVVM, и это упрощает общую структуру вашего приложения и позволит вам двигаться вперед. – Ricibob

+0

+1 к этому. Я нахожу, что XAML почти это требует. –

3

Вы должны реализовать INotifyPropertyChanged в вашей модели и вызвать событие при изменении значения.

+0

Я надеялся иметь абстрактные вещи, что далеко. Это относительно простая реализация. Если других вариантов не предложено, я должен = D – Ritz

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