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
...
我有一个带有两个模块的 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
...