wpf - Prism/WPF 中的新外壳/窗口显示错误视图
问题描述
受这个答案的启发,我创建了一个通用的 Shell(Prism,WPF),如下所示:
<Window x:Class="VRMDataLogger.UI.Shell" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:prism="http://prismlibrary.com/" Title="My App" Height="450" Width="800">
<Grid>
<ContentControl prism:RegionManager.RegionManager="{Binding RegionManager}" prism:RegionManager.RegionName="MainShellRegion" />
</Grid>
</Window>
public partial class Shell : Window
{
public Shell(IRegionManager regionManager, Type contentType)
{
RegionManager = regionManager;
InitializeComponent();
RegionManager.RegisterViewWithRegion("MainShellRegion", contentType);
}
public IRegionManager RegionManager { get; }
}
初始外壳创建于App.CreateShell()
:
protected override Window CreateShell()
{
return new Shell(Container.Resolve<IRegionManager>(), typeof(StartScreen));
}
这工作正常,正确的视图显示在初始外壳中。
然后我尝试创建第二个 Shell,StartScreenViewModel
从中显示不同的视图:
var shell = new Shell(RegionManager.CreateRegionManager(), typeof(MainScreen));
shell.Show();
这将打开一个新窗口,但它显示的视图与第一个窗口 ( StartScreen
) 相同,而不是MainScreen
。我在这里做错了什么?
解决方案
尝试为每个 shell 使用唯一的区域名称:
public partial class Shell : Window
{
public Shell(IRegionManager regionManager, Type contentType)
{
RegionManager = regionManager;
InitializeComponent();
MainRegionName = Guid.NewGuid().ToString();
RegionManager.RegisterViewWithRegion(MainRegionName, contentType);
}
public string MainRegionName { get; }
public IRegionManager RegionManager { get; }
}
XAML:
<ContentControl prism:RegionManager.RegionManager="{Binding RegionManager}"
prism:RegionManager.RegionName="{Binding MainRegionName, RelativeSource={RelativeSource AncestorType=Window}}" />
推荐阅读
- git - Flutter 无法将频道切换到 beta
- azure - 为什么 Azure 推荐用户委派共享访问签名
- c++ - 打印问题。我在数组中打印值时遇到一些问题
- google-cloud-firestore - 根集合权限是否扩展到 Firebase 中的子集合?
- django - 删除django中的多行
- python - 在 Python 中,如何将符号转换为表情符号?
- python - 用 pyplot 在前景中绘制更近的线条
- email - SpamAssassin:阻止来自除某些域之外的所有域的电子邮件到特定用户
- unity3d - Unity - 命令行性能
- xslt - 使用 XSLT 将 xsd:complex-type 元素复制到另一个 xsd:complex-type 元素