Повторное использование Datagrid в нескольких TabItems - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть приложение WPF, которое использует TabControl.Каждый TabItem будет содержать сетку данных.Когда приложение запускается, по умолчанию загружается один элемент TabItem, который отображает сетку данных «Учетные записи».Эта сетка данных отображает только информацию об учетной записи.Пользователь может затем добавить новые вкладки.Для каждой добавленной вкладки мне нужно загрузить одну и ту же сетку данных.Это НЕ тот же самый массив данных, который используется для TabItem Учетных записей.Новая сетка данных будет использоваться для ввода транзакций.Как определить сетку данных, которую можно использовать в каждом новом добавленном элементе TabItem, но который отличается от исходной сетки данных в первом элементе TabItem?

Ответы [ 3 ]

0 голосов
/ 21 декабря 2011

В этом случае я бы рекомендовал использовать шаблон MVVM.

Пусть ваш основной ViewModel определит свойство public ObservableCollection<object> Items.Свяжите свои TabControl ItemsSource с Items.

Определите DataTemplate для AccountsViewModel, который содержит DataGrid, который должен отображаться на счетах TabItem.

Определите DataTemplate для TransactionsViewModel, который содержит DataGrid, который должен отображаться в каждой Транзакции TabItem.

0 голосов
/ 21 декабря 2011

На Account Tab добавьте XAML a DataGrid, скажем, AccountDataGrid

Для других типов, поскольку они генерируются во время выполнения, лучше управлять ими из кода.

Создание DataGrid объекта, который будет использоваться другими TabItems, скажем, SharedDataGrid

После того, как вы можете сделать что-то вроде этого, например:

Определите свой пользовательский TabItem класс

 public sealed class CustomTabItem : TabItem
 {
 }

и после переопределения внутри этого класса

 protected override void OnInitialized(EventArgs e)
 {
    //assign shared SharedDataGrid to the content of TabItem
 }

В этом методе фактически присваивается SharedDataGrid содержимому только что созданного и инициализированного TabItem.

Должно работать.

0 голосов
/ 21 декабря 2011

Так что, если я правильно понимаю, что вы хотите, это значение по умолчанию DataGrid для первого tabitem, а затем для каждого нового tabitem то же самое datagrid.

Проблема здесь в том, что один DataGrid не может быть частью Two TabItems одновременно.Итак, что вам нужно сделать, это сначала объявить DataGrid в области видимости, где к нему можно получить доступ в коде.Затем, когда пользователь добавляет новый tabitem, впервые, динамически добавьте tab item в tab control и установите content равным DataGrid.Когда пользователь снова щелкнет элемент добавления новой вкладки, удалите элемент content вкладки, который ранее имел DataGrid, а затем добавьте datagrid в новый tab item.Вам также нужно будет обработать событие selection change вкладок, и внутри этого события вам придется удалить DataGrid из последнего выбранного элемента и вставить новый выбранный элемент.

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

...