2014-09-09 3 views
0

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

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

Когда я делаю это весь мой код интерфейса (xaml.cs), разбросанный с помощью элементов управления, включающих и отключающих.

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

В настоящее время я сделал это - создав одну функцию, которая принимает операцию как параметр, а затем на основе операции, которую я играю с помощью своих элементов управления.

Например:

private const string ADD_OPERATION = "Add"; 

private const string MODIFY_OPERATION = "Modify"; 

private const string DELETE_OPERATION = "Delete"; 

------------------------------------------------------- 

/// <summary> 
/// Method for disabling controls present on current screen 
/// based on various operations like add, delete, edit identity 
/// </summary> 
private void EnableOrDisableIdentityControl(string operation) 
{ 
    switch (operation) 
    { 
     case ADD_OPERATION: 
      this.EditIdentificationGroupBox.IsEnabled = true; 
      this.AddUpdateIdentificationButton.IsEnabled = true; 
      this.RelatedEntitiesGridFooter.IsAddButtonEnabled = false; 
      this.RelatedEntitiesGridFooter.IsEditButtonEnabled = false; 
      this.RelatedEntitiesGridFooter.IsDeleteButtonEnabled = false; 
      this.IdentificationDataGrid.IsEnabled = false; 

      break; 

     case MODIFY_OPERATION: 
      this.EditIdentificationGroupBox.IsEnabled = true; 

      // Disable identity grid 
      this.IdentificationDataGrid.IsEnabled = false; 
      this.RelatedEntitiesGridFooter.IsAddButtonEnabled = false; 
      this.RelatedEntitiesGridFooter.IsEditButtonEnabled = false; 
      this.RelatedEntitiesGridFooter.IsDeleteButtonEnabled = false; 
      this.EditIdentificationGroupBox.Focus(); 
      break; 

     case DELETE_OPERATION: 
      this.EditIdentificationGroupBox.IsEnabled = false; 

      break; 

     default: 
      this.EditIdentificationGroupBox.IsEnabled = false; 

      if (this.IdentificationDataGrid.Items.Count == 0) 
      { 
       this.RelatedEntitiesGridFooter.IsAddButtonEnabled = true; 
       this.RelatedEntitiesGridFooter.IsEditButtonEnabled = false; 
       this.RelatedEntitiesGridFooter.IsDeleteButtonEnabled = false; 
      } 
      else 
      { 
       this.RelatedEntitiesGridFooter.IsAddButtonEnabled = true; 
       this.RelatedEntitiesGridFooter.IsEditButtonEnabled = true; 
       this.RelatedEntitiesGridFooter.IsDeleteButtonEnabled = true; 
      } 

      break; 
    } 
} 

Я хочу знать, есть ли лучший подход для эффективного обработки управляет состоянием в коде позади?

+3

удалите весь этот ужасный код и используйте соответствующий DataBinding. достаточно простой 'IsEnabled = {{Операция привязки, Конвертер = {my: EnumToBoolConverter}, ConverterParameter = YourEnum}. –

+0

Это определенно хорошая идея, чтобы инкапсулировать эту логику одним методом. Однако в WPF вы можете определить Visual Состояния для ваших элементов управления и окон, а затем перевести их в эти состояния классом [VisualStateManager] (http://msdn.microsoft.com/en-us/library/system.windows.visualstatemanager.aspx). Начните читать здесь: [Определение различных визуальных состояний для элемента управления] (http://msdn.microsoft.com/en-us/library/ee371169 (v = Expression.40) .aspx). – Clemens

+0

@HighCore - организация не использует шаблон MVVM. Мы просто используем WPF, но как WinForms, где вся обработка событий выполняется по коду за файлом. – Deepanshu

ответ

0

Я не уверен, что использование метода winform для обработки кода - это правильный путь. WPF был специально разработан, чтобы избавиться от жесткой связи взгляда с кодом. Я бы предложил использовать шаблон MVVM (Model-View-ViewModel), предназначенный для WPF, который разрешил бы все упомянутые вами проблемы.

+0

Ye MVVM - лучший способ справиться с такими вещами, но я связан с текущей структурой, которую мы используем. Также я изучаю WPF и хочу изучать каждый из них и из него. Можете ли вы предложить любую хорошую документацию или руководство для этого? – Deepanshu

+0

До тех пор, пока вы не перейдете на MVVM, вы не можете оптимизировать свою оптимизацию, или даже если вы это сделаете, это не будет многоразовым или расширяемым, что является основным принципом OOPS. Таким образом, вы скорее реорганизуете код для использования MVVM. Для начала вы можете сослаться на этот сайт [link] (http://www.wpftutorial.net/) – Shaggy

+0

Спасибо за замечательную ссылку ... Да, у нас много избыточного кода в проекте. – Deepanshu

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