Лучший способ расширить поведение по умолчанию некоторых TabControl - PullRequest
0 голосов
/ 19 сентября 2011

У меня есть пользовательский TabControl в приложении WPF (внимание: технология не важна, как она может измениться), который содержит TabItems.Каждый TabItem имеет текст и кнопку «x» для закрытия вкладки.

Запрос состоит в том, чтобы добавить некоторые функции в функцию закрытия, чтобы изменить поведение по умолчанию (простое закрытие).Что мне нужно сделать, это просто проверить, изменились ли некоторые данные, отображаемые на экране, и, если это так, попросить пользователя с некоторым MessageBox сообщить ему, что некоторые изменения были внесены в эту вкладку.

В MessageBox будет отображаться сообщение «В данные были внесены некоторые изменения. Вы хотите сохранить их?», И будет иметь параметры:

  • Да - Сохранить изменениязатем закройте вкладку;
  • Нет - не сохраняйте их и закройте вкладку;
  • Отмена - ничего не делайте, не сохраняйте, не закрывайте;

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

На данный момент единственным решением, о котором я подумал, былорасширить элемент управления и реализовать новое событие закрытия.Это решение пока подойдет, потому что мне нужно сделать только одно изменение поведения вкладок.Проблема в том, что в будущем мне может понадобиться расширить функциональность другим способом, и я не хочу расширять TabControl каждый раз, когда меняется запрос.

Также мне нужно сохранить поведение по умолчаниюTabItem (простое закрытие).

Может кто-нибудь указать мне на какое-нибудь оптимальное решение, которое можно легко расширять с помощью различных поведений, а также переносить в любом приложении .NET.

Спасибо.

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

Учитывая, что вы уже определили пользовательский элемент управления, я бы предложил добавить новое событие , такое как OnTabClosing, которое запускается до того, как ваш пользовательский элемент управления закрывает вкладку. Таким образом, вы можете добавить пользовательские функции к закрытой вкладке без необходимости расширять сам элемент управления. Ссылка должна содержать всю информацию, необходимую для начала работы.

Вы также можете взглянуть на Routed Events , если вы заинтересованы в том, чтобы сделать это доступным в XAML для анимации раскадровки.

0 голосов
/ 20 сентября 2011

Я предлагаю вам привязать кнопку закрытия к Command.Затем команда вызовет вашу логику и покажет окно сообщения.

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

ИспользованиеКоманда дает вам гибкий контроль над тем, куда вы помещаете свою логику и чьи функции вы хотите вызвать.

...