Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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
Wpf Prism Mvvm Mef交互打开窗口新实例_Wpf_Mvvm_Prism_Mef - Fatal编程技术网

Wpf Prism Mvvm Mef交互打开窗口新实例

Wpf Prism Mvvm Mef交互打开窗口新实例,wpf,mvvm,prism,mef,Wpf,Mvvm,Prism,Mef,我正在学习不同的棱镜功能,现在我被困在打开新窗口的过程中。 我的应用程序外壳有主区域和详细区域。 Shell的主区域具有DataGrid,其中的项在单击时在详细区域中显示其属性。 我需要的是一种在主区域双击项来创建窗口新实例的方法。 每个新窗口都可以保持活动状态,直到我关闭它,所以我可以通过单击主区域中的任何其他项目来打开其他窗口 在MVVM之前的Prism时代,我可能会这样做: ICollection<Window> MyWindows = new List<Wind

我正在学习不同的棱镜功能,现在我被困在打开新窗口的过程中。 我的应用程序外壳有主区域和详细区域。 Shell的主区域具有DataGrid,其中的项在单击时在详细区域中显示其属性。 我需要的是一种在主区域双击项来创建窗口新实例的方法。 每个新窗口都可以保持活动状态,直到我关闭它,所以我可以通过单击主区域中的任何其他项目来打开其他窗口

在MVVM之前的Prism时代,我可能会这样做:

    ICollection<Window> MyWindows = new List<Window>();
    var wnd = MyWindows.SingleOrDefault(x => x.Name == id.ToString());
    if (wnd == null)
    {
        wnd = new MyWindow(this, id);
        MyWindows.Add(wnd);
    }
    wnd.Show();
ICollection MyWindows=new List();
var wnd=MyWindows.SingleOrDefault(x=>x.Name==id.ToString());
如果(wnd==null)
{
wnd=新的MyWindow(此,id);
MyWindows.Add(wnd);
}
wnd.Show();
但这是壳牌公司的ViewModel和Prism的禁区

从我的Shell xaml中使用了类似InteractionRequestTrigger的东西:

 <prism:InteractionRequestTrigger SourceObject="{Binding CyberPopUpViewRequest, Mode=OneWay}">
    <prism:PopupWindowAction>
        <prism:PopupWindowAction.WindowContent>
            <views:CyberPopUpView />
        </prism:PopupWindowAction.WindowContent>
    </prism:PopupWindowAction>
</prism:InteractionRequestTrigger>

但这只允许我创建一个窗口

但这是壳牌公司的ViewModel和Prism的禁区

如果将代码直接放在视图模型中,则为True。但如果您将其放入(读:hide)服务中(作为依赖项注入,在测试时可以替换为mock),则完全可以:

内部类窗口管理器:iWindows管理器
{
公共void CreateWindow(字符串id)
{
窗口wnd;
如果(!\u myWindows.TryGetValue(id,out-wnd))
{
wnd=新的MyWindow(Application.Current.MainWindow,id);
_myWindows[id]=wnd;
}
wnd.Show();
}
专用词典_myWindows=新词典();
}
但这是壳牌公司的ViewModel和Prism的禁区

如果将代码直接放在视图模型中,则为True。但如果您将其放入(读:hide)服务中(作为依赖项注入,在测试时可以替换为mock),则完全可以:

内部类窗口管理器:iWindows管理器
{
公共void CreateWindow(字符串id)
{
窗口wnd;
如果(!\u myWindows.TryGetValue(id,out-wnd))
{
wnd=新的MyWindow(Application.Current.MainWindow,id);
_myWindows[id]=wnd;
}
wnd.Show();
}
专用词典_myWindows=新词典();
}

谢谢,我会检查这一点,因为我没有想到要将窗口创建功能投入使用。我是否可能在新窗口的新布局中定义新的棱柱区域?我从未尝试过,但我想它可能会起作用。谢谢,我会检查这一点,因为我没有想到要将窗口创建投入使用。我是否可能在新窗口的新布局中定义新的棱镜区域?我从未尝试过,但我想它可能会起作用。