DataGrid в ContentTemplate TabItem теряет выбранную запись и положение прокрутки

У меня есть MyDataGrid, производное от DataGrid в ContentTemplate из TabItem:

    <TabControl.ContentTemplate>
        <DataTemplate>
            <MyDataGrid ItemsSource={Binding CurrentTab.Collection}>
                ...
            </MyDataGrid>
        </DataTemplate>
   </TabControl>

(CurrentTab — это текущий объект модели в моей ViewModel, а Collection — это ObservableCollection). Проблема в том, что когда я переключаю элемент вкладки на другой и возвращаюсь к первому, элементы, которые были выбраны/в окне просмотра, не выбираются, а DataGrid прокручивается до начала.

Также: Ошибки WPF TabControl и DataGrid, ошибки и ошибки ( первый "баг")


person fut33v    schedule 02.11.2015    source источник
comment
Разве привязка CurrentTab не меняется при переключении вкладки?   -  person Jose    schedule 02.11.2015
comment
Да, CurrentTab меняется, когда я переключаю вкладку.   -  person fut33v    schedule 02.11.2015
comment
Тогда я думаю, что вы теряете привязку в MyDataGrid ItemSource. Возможно, с небольшим количеством кода будет легче помочь.   -  person Jose    schedule 02.11.2015
comment
Хм, не понял, что значит потерять привязку? Все данные, которые должны отображаться для разных вкладок, отображаются правильно, проблема заключается в потере выбранного элемента и текущего окна просмотра. Вот мой XAML: pastebin.com/vpxB0Dgd   -  person fut33v    schedule 02.11.2015
comment
Я имею в виду, что вы меняете ItemSource вашего DataGrid каждый раз, когда вы меняете вкладку, возможно, это вызывает повторную инициализацию сетки, а затем вы теряете выбранный элемент, потому что при инициализации DataGrid он не имеет SelectedItem по умолчанию.   -  person Jose    schedule 02.11.2015
comment
Попробуйте привязать свой источник элементов к tab1.Collection, tab2.Collection... и т. д. вместо currentTab.Collection.   -  person Jose    schedule 02.11.2015
comment
@Kirenenko хм, если я привяжусь к чему-то вроде tab1..tab2, в этом шаблоне не будет смысла :D   -  person fut33v    schedule 03.11.2015
comment
@Kirenenko может быть какой-то способ создать несколько DataGrid для каждого шаблонного элемента вкладки ...   -  person fut33v    schedule 03.11.2015
comment
Затем вы должны указать соответствующий источник вкладки при использовании шаблона. Дайте мне код использования шаблона, если вы хотите больше объяснений.   -  person Jose    schedule 03.11.2015
comment
ViewModel: pastebin.com/P5PgHSiz, XAML: pastebin.com/vpxB0Dgd   -  person fut33v    schedule 03.11.2015
comment
Там так много кода... Я не собираюсь все это изучать. Я дам вам подсказку в ответ, может быть, это поможет.   -  person Jose    schedule 03.11.2015


Ответы (1)


Используйте TemplateBinding в своем шаблоне, затем передайте соответствующую вкладку или коллекцию, когда вы используете ее на каждой вкладке.

Проверьте это для получения дополнительной информации.

person Jose    schedule 03.11.2015