Caliburn.Micro,来自UserControl和Conductor.OneActive的多个ActiveItem

时间:2018-07-26 19:22:53

标签: c# wpf mvvm caliburn.micro

我有一个问题,但在统计中,我将向您描述我在问什么。

我正在使用Caliburn.Micro Framework开发应用程序。我想做的是制作多个ActiveItem(如UserControl)但同时显示一个。像这样:

<ContentControl x:Name="ActiveItem_1"/>

<ContentControl x:Name="ActiveItem_2"/>

<ContentControl x:Name="ActiveItem_3"/>

<ContentControl x:Name="ActiveItem_4"/>

我选择按UserControl显示哪个Buttons

所以我只想同时打开一个UserControl(当我打开一个using Caliburn.Micro; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TaskManager.ViewModels { class MainWindowViewModel : Conductor<IScreen>.Collection.OneActive { public void LoadLoginPage() { ActivateItem(new LoginViewModel()); } public void LoadTasksPage() { //And here i have no idea what to do, //how to make another UserControl to be ActiveItem } } } 时,不允许打开第​​二个)。

我的ViewModel.cs看起来像这样:

preg_match("#viewbox=[\"']\d* \d* (\d*) (\d*)#i", file_get_contents('file.svg'), $d);
$width = $d[1];
$height = $d[2];

那么,如何命名或编码这两个用户控件成为OneActive?我可以使用一个UserControl并更改其大小和边距,但是我认为它比更改UserControls更为复杂

感谢您的建议!

1 个答案:

答案 0 :(得分:1)

如果我正确理解了这一点,则您希望拥有4个内容控件,但任何时候只有一个包含一个视图。即您按下按钮1时,内容控件1会显示一个视图,但是当您单击另一个按钮时,内容控件1就会消失,并且会填充新按钮的内容控件?

您不能使用ActivateItem,因为ActivateItem要求您有一个名为ActiveItem的内容控件。

您需要执行以下操作:

Button1ViewModel ActiveItem_1 = null;
Button2ViewModel ActiveItem_2 = null;
Button3ViewModel ActiveItem_3 = null;
Button4ViewModel ActiveItem_4 = null;

public void Button1()
{
    if (ActiveItem_1 == null)
        ActiveItem_1 = new Button1ViewModel();

    if (ActiveItem_2 != null)
    {
        ActiveItem_2.TryClose();
        ActiveItem_2 = null;
    }

    if (ActiveItem_3 != null)
    {
        ActiveItem_3.TryClose();
        ActiveItem_3 = null;
    }

    if (ActiveItem_4 != null)
    {
        ActiveItem_4.TryClose()
        ActiveItem4 = null;
    }
}

对其他按钮执行类似操作,分别为每个按钮打开正确的视图模型,然后关闭其他按钮。

确实,您应该执行OneActive并只有一个名为ActiveItem的contentcontrol,并且每次单击按钮之一时都会填充该控件。只要您不设置明确的大小,contentcontrol就会调整为您的视图的大小(或者您可以将所有视图设计为相同的大小)。