在WPF + PRISM中查看删除/停用不起作用

时间:2014-06-22 04:10:35

标签: wpf view prism regions cal

我有一个带有ContentControl

的shell(窗口)
<ContentControl regions:RegionManager.RegionName="mainContentRegion"/>

我有两个观点,我在Unity注册了不同的项目

RegionManager.RegisterViewWithRegion("mainContentRegion", () => new MusicGeneration());

RegionManager.RegisterViewWithRegion("mainContentRegion", () => new StartupControl(Container));

在应用程序启动时,StartupControl会根据需要显示在区域中。但是,我试图将StartupControl替换为MusicGenerator,这被证明是一个无果而终的吞噬者。

首先我尝试更改视图(因为ContentControl一次只能托管一个视图')

regionManager.Regions["mainContentRegion"].Activate(container.Resolve<MusicGeneration>()); 

但是导致错误。

NEXT 尝试

regionManager.Regions["mainContentRegion"].Add(container.Resolve<MusicGeneration>()); 

真正将视图添加到管理员管理的区域列表中,但仍然永远不会删除原始(StartupControl)视图。

我也试过这个

regionManager.RequestNavigate("mainContentRegion", new Uri("MusicGeneration", UriKind.Relative));

原始视图,即StartupControl永远不会从rootVisual中删除。

两个视图的完整代码列表

StartupControl.xaml.cs

public partial class StartupControl : IRegionMemberLifetime
{
    public bool KeepAlive
    {
        get { return false; }
    }

    public StartupControl(IUnityContainer container)
    {
        InitializeComponent();
        DataContext = container.Resolve<StartupViewModel>();
    }
}

StartupControl.xaml

<UserControl x:Class="StartupModule.Views.StartupControl"
             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" >

    <Grid Name="Container">
         has content here which displays correctly
    </Grid>
</UserControl>

MusicGenerator.xaml.cs

using Microsoft.Practices.Prism.Regions;

namespace GeneticMusic.Views
{
    /// <summary>
    /// Interaction logic for StartupControl.xaml
    /// </summary>
    public partial class MusicGeneration : IRegionMemberLifetime
    {
        public bool KeepAlive
        {
            get { return false; }
        }

        public MusicGeneration()
        {
            InitializeComponent();
        }
    }
}

GenerateMusic.xaml

<UserControl x:Class="GeneticMusic.Views.MusicGeneration"
             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"
             xmlns:toolkit="http://schemas.xceed.com/wpf/xaml/toolkit"
             mc:Ignorable="d" >


    <Grid Name="Container">
        content here... displays correctly
    </Grid>
</UserControl>

编辑:似乎重复

Prism RequestNavigate does not work

0 个答案:

没有答案