如何在WPF中实现Tab页面控件的延迟绑定?

mku*_*kus 4 wpf binding tabcontrol lazy-loading mvvm

我有一个实体类.这个实体有很多属性和实体的数据显示给用户一些TabItemsTabControl.我还实现了MVVM方法.

当屏幕首先显示给用户时,我想只绑定活动标签页控件,当用户浏览标签页时,将根据需要产生额外的单独绑定.我怎样才能做到这一点?

Tho*_*que 16

你没有任何事情要做,这是默认行为.在DataTemplate一个TabItem直到这个内容将不会被实例化TabItem选择


编辑:这是一个例子:

<Window.Resources>
    <DataTemplate DataType="{x:Type vm:Page1ViewModel}">
        <v:Page1View />
    </DataTemplate>
    <DataTemplate DataType="{x:Type vm:Page3ViewModel}">
        <v:Page3View />
    </DataTemplate>
    <DataTemplate DataType="{x:Type vm:Page3ViewModel}">
        <v:Page3View />
    </DataTemplate>
</Window.Resources>

...

<TabControl ItemsSource="{Binding Pages}"
            DisplayMemberPath="Title">
</TabControl>
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,TabControlDataTemplate根据项类型选择适当的,并仅在选择该项时呈现它.


编辑2:显然你想在几个页面上显示单个ViewModel的数据.如果你想要对每个控件TabItem进行懒惰实例化,你需要使用ContentTemplate每个的属性TabItem:

<TabControl>
    <TabItem Header="Page 1">
        <TabItem.ContentTemplate>
            <DataTemplate>
                <v:Page1View />
            </DataTemplate>
        </TabItem.ContentTemplate>
    </TabItem>
    <TabItem Header="Page 2">
        <TabItem.ContentTemplate>
            <DataTemplate>
                <v:Page2View />
            </DataTemplate>
        </TabItem.ContentTemplate>
    </TabItem>
    <TabItem Header="Page 3">
        <TabItem.ContentTemplate>
            <DataTemplate>
                <v:Page3View />
            </DataTemplate>
        </TabItem.ContentTemplate>
    </TabItem>
</TabControl>
Run Code Online (Sandbox Code Playgroud)