Я создаю приложения WPF с помощью MVVM рамки, и я принял несколько функций из статьи Джоша Смита на MVVM here...Связывание TabControl ItemsSource к ObservableCollection из ViewModels вызывает содержание, чтобы освежить в фокусе
Самое главное, Я привязываю TabControl к ObservableCollection из ViewModels. Это означает, что я использую интерфейс MDI с вкладками, который отображает UserControl как содержимое TabItem. Проблема, которую я вижу в своем приложении, заключается в том, что когда у меня есть несколько вкладок, и я переворачиваюсь между вкладками, содержимое ссылается на каждый раз, когда я меняю вкладки.
Если вы загрузите исходный код Джоша Смита, вы увидите, что его приложение имеет ту же проблему. Например, нажмите кнопку «Просмотреть всех клиентов» и прокрутите вниз до списка ListView. Затем нажмите кнопку «Создать нового клиента». Когда вы вернетесь к просмотру «Все клиенты», вы заметите, что ListView прокручивается назад. Если вы вернетесь на вкладку «Новый клиент» и поместите курсор в один из текстовых полей, перейдите на вкладку «Все клиенты» и обратно, вы заметите, что курсор теперь исчез.
Я предполагаю, что это потому, что я использую ObservableCollection, но я не могу быть уверен. Есть ли способ предотвратить обновление содержимого вкладки при получении фокуса?
EDIT: Я нашел свою проблему, когда запустил профайлер в своем приложении. Я определяю DataTemplate для моего ViewModels поэтому он знает, как оказать ViewModel, когда он отображается на вкладке ... как так:
<DataTemplate DataType="{x:Type vm:CustomerViewModel}">
<vw:CustomerView/>
</DataTemplate>
Поэтому, когда я перейти на другую вкладку, он должен повторно -создайте ViewModel снова. Я исправил это временно, изменив свой ObservableCollection ViewModels на ObservableCollection of UserControls. Тем не менее, я по-прежнему хотел бы использовать DataTemplates, если это возможно. Есть ли способ сделать работу DataTemplate?
Я пробовал, но это не сработало. Я обновил свой вопрос ... дайте мне знать, можете ли вы внести какие-либо данные. Благодарю. – Brent