如何强制加载 WPF 中 TabControl 的所有 TabItem 的内容? (使用 Caliburn.micro)

How can I force the content load off all the TabItems of my TabControl in WPF? (using Caliburn.micro)

我使用 Caliburn.Micro 将一组屏幕加载到选项卡控件中。

我的问题是:在单击选项卡显示之前,选项卡内容不会加载。我已经尝试过一个一个地更改所选索引,激活所有项目等等,但没有任何效果!

有谁知道我该如何解决这个问题?我 运行 没有想法和头发。谢谢!

<Controls:MetroWindow x:Class="App.Views.ShellView"
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                  xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
                  xmlns:Dialog="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
                  xmlns:cal="http://www.caliburnproject.org"
                  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                  Dialog:DialogParticipation.Register="{Binding}"
                  BorderBrush="{DynamicResource AccentColorBrush}"
                  BorderThickness="1"
                  WindowStartupLocation="CenterScreen"
                  WindowState="Maximized"
                  mc:Ignorable="d">
<Grid>
    <TabControl Name="Items" >
    </TabControl>
</Grid>

public class ShellViewModel : Conductor<IScreen>.Collection.AllActive
{
    protected override void OnViewLoaded(object view)
    {
        base.OnViewLoaded(view);

        int x = 0;

        for(int x = 0; x < 5; x++)
        {
            MyTabViewModel myTabVm = new MyTabViewModel(x.ToString());
            Items.Add(myTabVm);
        }
    }
}

OnViewLoaded 仅在我单击选项卡时触发:(

public class MyTabViewModel : Screen
{
    public MyTabViewModel(string displayName)
    {
        this.DisplayName = displayName;
        this.ViewAttached += SistemaClaroViewModel_ViewAttached;
    }

    protected override void OnViewLoaded(object view)
    {
        GetBrowser().Navigate(new Uri("https://www.google.com.br/"));
        base.OnViewLoaded(view);
    }

    public WebBrowser GetBrowser()
    {
        return ((MyTabView)this.GetView()).Browser;
    }
}

有一件事让我印象深刻。 ShellViewModel 不应该使用 Conductor<IScreen>.Collection.OneActive 基数吗?一次只能激活一个选项卡?您还需要将 Activeitem 绑定到选项卡控件上。 ActiveItemOneActive 基础 class 的 属性。

Caliburn Micro 有一个使用选项卡控件的示例 here

我通过在 window 上复制我的观点并使它们不可见来解决了我的问题。 我认为这是一个糟糕的解决方案,但这就是我所拥有的。 :/ 如果有人在这里提出任何新建议,我会洗耳恭听。

<!-- My visible tab control-->
<TabControl Name="Items"
                Grid.Row="0"
                SelectedValue="{Binding ActiveItem}" />

<!-- Duplicated, invisible, tab control's views (Only to force immediate loading -->
<ListView Grid.Row="1"
          ItemsSource="{Binding Items}"
          Visibility="Hidden">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ContentControl cal:View.Model="{Binding}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>