Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Caliburn.Micro,来自UserControl和Conductor.OneActive的多个ActiveItem_C#_Wpf_Mvvm_Caliburn.micro - Fatal编程技术网

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

C# Caliburn.Micro,来自UserControl和Conductor.OneActive的多个ActiveItem,c#,wpf,mvvm,caliburn.micro,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"/> <

我有一个问题,但在统计中,我会告诉你我在问什么

我正在用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并更改其大小和边距,但我认为这将比更改UserControls更复杂


谢谢你的建议

如果我理解正确,您希望有4个内容控件,但每次只有一个包含视图。也就是说,您按下按钮1,内容控制1有一个视图,但当您单击另一个按钮时,内容控制1消失,新按钮的内容控制被填充

不能使用ActivateItem,因为ActivateItem要求您具有名为ActiveItem的contentcontrol

您需要执行以下操作:

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
        }
    }
}
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将根据您的视图调整大小(或者您可以将所有视图设计为相同大小)。

这很有意义。我会在几天后(夏季)检查它,如果它有效与否,我会给你反馈。如果它不工作,我将在一个用户控制一次工作。它将更加优雅(对我来说,两个用户控件看起来更容易,我们不需要更改一个用户控件的大小或位置)