Динамическое управление вкладками в WPF / mvvm - PullRequest
0 голосов
/ 05 октября 2010

Я следую методу wpf / mvvm. Мне нужно иметь вкладку управления ... с несколькими строками .. я имею в виду родительские / дочерние строки. Когда пользователь щелкает вкладку, все дочерние вкладки под ней должны отображаться ... но должна загружаться только страница под одной дочерней вкладкой.

Может кто-нибудь помочь мне в этом, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 05 октября 2010

Да, вы можете сделать это, привязав свойство SelectedTabIndex на вкладке Control к строке в ViewModel. (Так что все дело в том, как вы проектируете структуры данных в ViewModel.)

Относительно загрузки содержимого вкладки при выборе вкладки:

Изначально вы можете вызвать сервис из вашей ViewModel и получить количество вкладок, заполнить его коллекцией Observable и привязать ваши вкладки к коллекции. Вы можете иметь свойство SelectedTab в вашей ViewModel и иметь его значение -1. Теперь, после того как вы получили количество вкладок и привязали их к элементу управления вкладками (я не загружаю содержимое вкладки; только вкладки для отображения), вы можете установить SelectedTab = 0 и в установщике вы можете передать TabId и загрузить данные для Таб.

private string selectedTab = -1;
public string SelectedTab 
{
    get { return selectedTab; }
    set { 
           selectedTab = value;
           LoadTabContent(selectedTab);
           OnPropertyChanged("SelectedTab"); // I have implemented INotifyPropertyChanged event
        }
}

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

0 голосов
/ 05 октября 2010

РЕДАКТИРОВАТЬ

вы должны иметь родительскую вкладку, которая будет содержать вкладки и будет привязана к этой коллекции

, где проблема в том, что если вы храните открытые ObservableCollection> MyCollection{ получить;задавать;} вы должны держать их все одновременно.

, поэтому я бы порекомендовал вам держать

IEnumerable _modules

там, где каждый раз, когда вы загружаете другую вкладку, вы динамически делаетеIEnumerable _modules clear (вы можете сделать это, используя триггер и команду), где вы вызываете dispoe для каждого элемента

надеюсь, на этот раз я вас понял

...