C# WPF Prism区域里的区域无法默认选中?

主页的区域设置后可以默认选中

void CreateMenuBar()
{
    MenuBars.Add(new MenuBar() { Icon = "Home", Title = "首页", NameSpace = "IndexView" });
    MenuBars.Add(new MenuBar() { Icon = "Cog", Title = "设置", NameSpace = "SettingsView" });
}

/// <summary>
/// 配置首页初始化参数
/// </summary>
public void Configure()
{
     regionManager.Regions[PrismManager.MainViewRegionName].RequestNavigate("IndexView");
}

但是进入二级页面后,再设置的区域无法默认选中

public class SettingsViewModel : BindableBase
{
    public SettingsViewModel(IRegionManager regionManager)
    {
        MenuBars = new ObservableCollection<MenuBar>();
        this.regionManager = regionManager;
        NavigateCommand = new DelegateCommand<MenuBar>(Navigate);
        CreateMenuBar();
        //this.regionManager.Regions[PrismManager.SettingsViewRegionName].RequestNavigate("SettingsUserView");
    }

    private void Navigate(MenuBar obj)
    {
        if (obj == null || string.IsNullOrWhiteSpace(obj.NameSpace))
            return;
        regionManager.Regions[PrismManager.SettingsViewRegionName].RequestNavigate(obj.NameSpace);
    }

    public DelegateCommand<MenuBar> NavigateCommand { get; private set; }
    private ObservableCollection<MenuBar> menuBars;
    private readonly IRegionManager regionManager;

    public ObservableCollection<MenuBar> MenuBars
    {
        get { return menuBars; }
        set { menuBars = value; RaisePropertyChanged(); }
    }


    void CreateMenuBar()
    {
        MenuBars.Add(new MenuBar() { Icon = "Cog", Title = "系统设置", NameSpace = "SettingsUserView" });
        MenuBars.Add(new MenuBar() { Icon = "Palette", Title = "个性化", NameSpace = "SkinView" });
        MenuBars.Add(new MenuBar() { Icon = "Information", Title = "关于更多", NameSpace = "AboutView" });
    }

使用this.regionManager.Regions[PrismManager.SettingsViewRegionName].RequestNavigate("SettingsUserView");无法跳转,延迟执行也没用,请问这是什么原因?

阅读 289
avatarAI BotBETA

从你的代码中看,你在 SettingsViewModel 的构造函数中创建了菜单栏,并在 CreateMenuBar 方法中添加了几个 MenuBar 实例。然而,你在 NavigateCommandExecute 方法中尝试跳转到特定的视图,但是 RegionManager 没有找到相应的区域。这可能是因为区域管理器的实例化出现了问题,或者区域的名称不正确。

首先,确保你在应用程序中正确实例化了 RegionManager。如果你正在使用 Prism,你需要在你的 Shell 类的构造函数中实例化一个 RegionManager 对象。例如:

public Shell()
{
    this.regionManager = new RegionManager();
    ...
}

其次,你需要确保你正确设置了区域的名称。在你的代码中,你设置了区域的名称是 "SettingsViewRegionName""SettingsUserView"。确保这些名称在你的应用程序中是唯一的,并且在使用 RequestNavigate 方法时被正确引用。

如果上述步骤都正确的话,那么问题可能在于 RequestNavigate 方法调用的时机。这个方法是一个异步方法,它不会立即导航到新的视图,而是返回一个 Task 对象,表示导航操作。如果你试图在 RequestNavigate 调用后立即检查区域状态(例如通过 Region.IsActive),那么你可能会发现它还没有改变。

如果你需要立即执行某些操作,例如更新 UI,那么你可以在 Task.CompletedTask 上添加一个事件处理器。例如:

regionManager.Regions[PrismManager.SettingsViewRegionName].RequestNavigate("SettingsUserView").CompletedTask.ContinueWith((prevTask) =>
{
    // 在这里执行需要在导航完成后才执行的代码
});

希望这些信息对你有所帮助!如果你还有任何问题,欢迎随时提问。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Microsoft
子站问答
访问
宣传栏