我使用Caliburn.Micro将一组Screens加载到制表符控件中。
我的问题是:在我点击标签显示标签内容之前,标签内容未加载。我已经尝试逐个更改所选索引,激活所有项目等但没有任何作用!
有谁知道我怎么解决这个问题?我的想法和头发都用完了。 THX!
<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;
}
}
答案 0 :(得分:0)
有一件事突然袭来。我不应该ShellViewModel
使用Conductor<IScreen>.Collection.OneActive
基础。一次只能激活一个选项卡?您还需要将Activeitem
绑定到选项卡控件上。 ActiveItem
是OneActive
基类的属性。
Caliburn Micro有一个使用标签控件here的样本。
答案 1 :(得分:0)
我通过在窗口上复制我的视图并使它们不可见来解决了我的问题。 我认为这是一个糟糕的解决方案,但我已经拥有了。 :/ 如果有人在这里提出任何新的建议,我会全力以赴。
<!-- 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>