使用Caliburn.Micro时找不到我的视图,但更改选项卡时它可以正常工作

时间:2013-12-16 02:40:02

标签: c# wpf caliburn.micro

我举了以下一个例子:

<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();
}

有什么理由吗?

1 个答案:

答案 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中