Проблема привязки WPF TabControl - PullRequest
0 голосов
/ 19 сентября 2011

У меня есть TabControl с двумя вкладками: основное время и дополнительное время.Модель основного вида содержит основные часы и дополнительные часы в качестве свойств, первая вкладка привязана к основным часам, вторая вкладка - к дополнительным часам.Каждый час имеет команду очистки (DelegateCommand из Prism).В верхней части TabControl есть кнопка с командой «Очистить все» (CompositeCommand).Часы создаются в конструкторе модели основного вида.

Проблема:

Команды из дополнительных часов не являются причиной и не участвуют в команде «Очистить все»", а кнопка" Очистить все "не активна, пока я не выберу вторую вкладку (на первой вкладке нечего очищать, но на вторых есть).

Я пытался отключить виртуализацию в TabControl, ноэто не помогло мнеТакже после загрузки данных я вызываю clearCommand.RaiseCanExecuteChanged для каждого часа.

Обновление: Когда я перебираю часы в отладчике и наблюдаю, может ли команда выполняться, все в порядке, и пользовательский интерфейс обновляется правильно.Но без отладчика это не так.

1 Ответ

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

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

  1. Призма DelegateCommand не выполняет автоматический повторный запрос CanExecute в случае изменения параметра. Чтобы проверить, является ли это вашей проблемой или нет, я бы переключился на использование RelayCommand некоторого вида .... Я часто использую MVVM Galasoft Light RelayCommand, когда я хочу, чтобы команда автоматически -оценить CanExecute при изменении параметра

  2. По умолчанию WPF выгружает невидимые элементы TabItems. Поэтому, если свойство SaveAllButton.Enabled основано на Tab1.SaveButton.Enabled и Tab2.SaveButton.Enabled, Tab2 есть, что сохранить, но Tab1 нет, а Tab1 имеет фокус, тогда кнопка SaveAll будет отключена, потому что Tab2 не виден и, следовательно, не загружен Чтобы проверить, так ли это, переключитесь на что-то вроде ListBox В этом случае вы можете использовать найденный код здесь , чтобы ваш TabControl не выгружал невидимые вкладки.

...