问题描述:
WPF项目,使用的是prism框架。首先有一个主界面,其它的界面都设计为UserControl,
主界面通过导航的方式去加载UserControl, 大致代码如下
<Window x:Class="BookDispenser.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:prism="http://prismlibrary.com/"
xmlns:usercontrols="clr-namespace:MyProject.Controls"
prism:ViewModelLocator.AutoWireViewModel="True" //这里自动绑定相同名字的ViewModel
mc:Ignorable="d"
Title="Project"
Height="450" Width="800">
<Grid>
...
....
<!--这里显示UserControl-->
<ScrollViewer>
<ContentControl prism:RegionManager.RegionName="ContentRegion" />
</ScrollViewer>
</Grid>
</Window>
每个UserControl都有一个相同名称的VewModel,自动绑定,一一对应。
这个本来没有问题。但是目前情况不一样了,两个UserControl对应一个
ViewModel,其中一个UserControl是给正常人看的,一个是UserControl是
给残疾人看的,内容一样,但是界面排版和 样式不一样,数据绑定也一样,
所以需要绑定同一个ViewModel
目前残疾人的UserControl的名称比较长,加了前缀,所以无法自动绑定
到ViewModel,所以需要额外指定。
我曾尝试在UserControl.cs后台去绑定,但是呢,不行,代码如下
using BookDispenser.ViewModels;
using System.Windows.Controls;
namespace BookDispenser.Views
{
/// <summary>
/// AccessibilityTakeReservedProcessingView.xaml 的交互逻辑
/// </summary>
public partial class AccessibilityTakeReservedProcessingView : UserControl
{
public AccessibilityTakeReservedProcessingView()
{
InitializeComponent();
/*
* 我本想在后台进行绑定,但是行不通,会报错。
* 因为TakeReservedProcessingViewModel继承NavigableViewModel,所以它的构造函数带参数
* 我尝试在TakeReservedProcessingViewModel中加上无参数的构造函数,但又不允许;
* 但是带参数的话,又会报错,所以最终这种方式还是行不通
*/
this.DataContext = new TakeReservedProcessingViewModel(null,null,null,null);
}
}
}
提出问题:对于我的这种情况,有什么方法可以解决问题呢?
期待各位能人的指点,感谢!