Загружать содержимое TabItem, когда оно выбрано (не ранее) в MVVM - PullRequest
2 голосов
/ 25 ноября 2010

В приложении Prism V4 / MEF / MVVM я получил представление, содержащее TabControl.

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

Как получить уведомление об изменениях TabItem в MVVM?

1 Ответ

6 голосов
/ 25 ноября 2010

Я думаю, что вы имеете в виду ленивую загрузку.Запустите этот пример и поместите точку отладки в конструктор ContentViewModel.

public MainWindow()
    {
        InitializeComponent();
        var items = new List<TabItemViewModel>
        { new TabItemViewModel{Title="Tab 1", Content = new Lazy<ContentViewModel>(() => new ContentViewModel(1))},
            new TabItemViewModel{Title="Tab 2", Content = new Lazy<ContentViewModel>(() => new ContentViewModel(2))}
        };
        tab.ItemsSource = items;
    }

    public class TabItemViewModel
    {
        public string Title { get; set; }
        public Lazy<ContentViewModel> Content { get; set; }
    }

    public class ContentViewModel
    {
        public ContentViewModel(int i)
        {
            this.SomeText = "Loaded tab "+i;
        }
        public string SomeText { get; set; }
    }

Шаблоны Xaml:

    <TabControl x:Name="tab">
        <TabControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Title}"/>
            </DataTemplate>
        </TabControl.ItemTemplate>
        <TabControl.ContentTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Content.Value.SomeText}"/>
            </DataTemplate>
        </TabControl.ContentTemplate>
    </TabControl>
...