Обновление проверки wpf между вкладками
Я получаю там с этой проверкой WPF, IDataErrorInfo, INotifyPropertyChange вещи, но новая проблема при обновлении. У меня есть окно с кучей элементов управления. У меня есть интерфейс страницы с вкладками и для простоты есть 2 страницы... 5 элементов управления на каждой.
Я начинаю "Добавить" запись, поэтому все поля пусты. Пример: 3 поля на первой странице, которые требуют проверки, правильно помечены красной рамкой, чтобы указать, что они обязательны... нет проблем.
Теперь я нажимаю на страницу 2 и сразу возвращаюсь на страницу 1. Красные границы исчезли. Они не отображаются красным, если я не перелистываю их явно, чтобы перефокусировать, потерять фокус и заставить его выполнить проверку измененного свойства lostfocus / property через IDataErrorInfo.
Во-первых, любое объяснение, ПОЧЕМУ WPF теряет внешний вид первой страницы только потому, что ему нужно изменить видимость страницы 1, чтобы показать страницу 2, а затем вернуться к странице 1.
Во-вторых, предложения о том, как принудительно обновить элементы управления с красной рамкой, указывающей, что они необходимы.
Спасибо
2 ответа
Если я правильно помню, маркеры проверки ошибок по умолчанию для элементов управления - это просто красные прямоугольники, наложенные поверх элемента управления, а не часть самого элемента управления, поэтому видимость этого наложения не сохраняется, если элемент управления скрыт. Вы можете попытаться изменить шаблон элемента управления, чтобы включить красную рамку / метку непосредственно как часть элемента управления, и эта проблема может быть устранена.
Чтобы принудительно обновить все ваши привязки (и, следовательно, их проверку), все, что вам нужно сделать, это снова вызвать RaisePropertyChanged для любого свойства, которое вы хотите повторно проверить. Это немного расточительно, но вы можете просто вызвать RaisePropertyChanged с пустой строкой в качестве параметра, и он будет вызываться для всех свойств в модели представления.
Просто поместите проверяемые элементы управления в AdornerDecorator, и он будет работать нормально;)
<TabItem>
<AdornerDecorator>
<Grid>
<TextBox>
</TextBox>
...
</Grid>
</AdornerDecorator>
</TabItem>