我举了以下一个例子:
<UserControl x:Class="SInnovations.WindowsAzure.Publisher.Views.TabsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<TabControl x:Name="Items"
SelectedItem="{Binding ActiveItem, Mode=TwoWay}" >
<TabControl.ItemTemplate>
<!-- this is the header template-->
<DataTemplate>
<TextBlock Text="{Binding Header}"></TextBlock>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
</UserControl>
在我的ShellView中,我有:
<Views:TabsView cal:Bind.Model="{Binding TabsViewModel}" />
映射到shellviewmodel上的模型。
public TabsViewModel TabsViewModel { get; set; }
并且TabsViewModel如下所示:
public class TabsViewModel : Conductor<IScreen>.Collection.OneActive
{
public void Add(BaseTabViewModel testTabViewModel)
{
Items.Add(testTabViewModel);
ActivateItem(testTabViewModel);
}
}
public class BaseTabViewModel : Screen
{
private bool _isEnabled;
public bool IsEnabled
{
get { return _isEnabled; }
set
{
if (value.Equals(_isEnabled)) return;
_isEnabled = value;
NotifyOfPropertyChange(() => IsEnabled);
}
}
}
我的问题是当UI旋转时,我将两个视图模型添加到tabViewModel,视图只是写出类型“SInnovations.WindowsAzure.Publisher.ViewModels.TestTabViewModel”,并且当我单击其中一个选项卡,将视图更新为“TestTabView.xaml”
的内容 TabsViewModel.Add(new TestTabViewModel());
TabsViewModel.Add(new TestTabViewModel());
虽然在BaseTabViewModel上没有调用我的OnActivate
protected override void OnActivate()
{
base.OnActivate();
}
有什么理由吗?
答案 0 :(得分:0)
使用ContentControl解决了它。
<!--<Views:TabsView cal:Bind.Model="{Binding TabsViewModel}" />-->
<ContentControl x:Name="TabsViewModel"></ContentControl>
另一个有完全相同设置的人问这里
http://caliburnmicro.codeplex.com/discussions/435779
只需要在子视图模型上使用(这个)。
TabsViewModel = new TabsViewModel();
TabsViewModel.ConductWith(this);
在shell contstructor中。