Prism WPF 绑定 RegionManager.RegionName

Prism WPF Binding RegionManager.RegionName

我有一个带有两个模块的 Prism 7 应用程序,分别称为 ModuleA 和 ModuleB。在我的主要 window 中,如果单击“显示 A”按钮,我希望能够显示 ModuleA,如果单击“显示 B”按钮,我希望能够显示 ModuleB。我通过以下方式实现了行为:

MainWindow.xaml

<Window x:Class="ModulesTest.Views.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:prism="http://prismlibrary.com/"
    prism:ViewModelLocator.AutoWireViewModel="True"
    Title="{Binding Title}" Height="350" Width="525">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <ContentControl prism:RegionManager.RegionName="{Binding Module}" />
    <StackPanel Grid.Row="1">
        <Button Command="{Binding ShowModuleCommand}"
                CommandParameter="A">
            Show A
        </Button>
        <Button Command="{Binding ShowModuleCommand}"
                CommandParameter="B">
            Show B
        </Button>
    </StackPanel>
    
</Grid>

MainWindowViewModel.cs

public class MainWindowViewModel : BindableBase
{
    private string _title = "Prism Application";
    public string Title
    {
        get { return _title; }
        set { SetProperty(ref _title, value); }
    }

    private string fieldName;
    public string Module
    {
        get { return fieldName; }
        set { SetProperty(ref fieldName, value); }
    }

    private DelegateCommand<string> _showModuleCommand;
    public DelegateCommand<string> ShowModuleCommand =>
        _showModuleCommand ?? (_showModuleCommand = new DelegateCommand<string>(ExecuteShowModuleCommand));

    void ExecuteShowModuleCommand(string module)
    {
        Module = "Module" + module;
    }

    public MainWindowViewModel()
    {
        Module = "ModuleA";
    }
}

问题是 RegionManager.RegionName 仍然是在 ViewModel 的构造函数中设置的“ModuleA”,并且在单击“显示 B”时不会更改。 RegionManager.RegionName 的绑定是设计不允许的还是我做错了?

这也是回购的 link:https://github.com/moisejbraver/ModulesTest

区域是用户界面的结构部分。将区域名称分配给特定控件后,您不应重新分配区域名称。

如果您需要在区域内导航,请考虑使用 IRegionNavigationService...