Я работаю над пользовательским интерфейсом, где у меня есть некоторые элементы управления, такие как текстовое поле, кнопка, радиобуй и многое другое.Эффективный способ включения/отключения элементов управления в 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;
}
}
Я хочу знать, есть ли лучший подход для эффективного обработки управляет состоянием в коде позади?
удалите весь этот ужасный код и используйте соответствующий DataBinding. достаточно простой 'IsEnabled = {{Операция привязки, Конвертер = {my: EnumToBoolConverter}, ConverterParameter = YourEnum}. –
Это определенно хорошая идея, чтобы инкапсулировать эту логику одним методом. Однако в 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
@HighCore - организация не использует шаблон MVVM. Мы просто используем WPF, но как WinForms, где вся обработка событий выполняется по коду за файлом. – Deepanshu