У меня проблемы с методом regionManager.RegisterViewWithRegion
. Я использую Prism.Unity и Prism.Wpf (оба v7.2.0.1367)
Когда я хочу зарегистрировать представление ShowStringView
(я создал это представление только для начала работы с призмой ...) в UIModule.cs
, я всегда получаю Set property 'Prism.Mvvm.ViewModelLocator.AutoWireViewModel' threw an exception.' Line number '7' and line position '14'.
внутри ShowStringView.xaml
.
Когда я обмениваю строителя на ShowStringViewModel.cs
, который имеет IDBInteraction как параметр, с конструктором без параметров это работает. (см. ниже)
Я уверен, что есть что-то, о чем я не думаю, или я использую это неправильно ...
Было бы очень приятно, если бы кто-то мог мне помочь.
Заранее спасибо!
Обновление 1
В DBInteraction.cs возникла проблема (см. решение )
Мой код
DBInteraction.cs (обновление 1)
public class DBInteraction : IDBInteraction
{
LinqToTaskPlanSqlDataContext dataContext;
public DBInteraction()
{
string connectionString = ConfigurationManager.ConnectionStrings["TaskPlanConnectionString"].ConnectionString;
dataContext = new LinqToTaskPlanSqlDataContext(connectionString);
}
}
Shell.xaml
<Window x:Class="TP.Client.Shell"
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:local="clr-namespace:TP.Client"
xmlns:prism="http://prismlibrary.com/"
xmlns:region="clr-namespace:TP.Common;assembly=TP.Common"
mc:Ignorable="d"
Title="Shell" Height="450" Width="800">
<Grid>
<ContentControl prism:RegionManager.RegionName="{x:Static region:RegionNames.ShowStringRegion}" />
</Grid>
</Window>
App.xaml.cs
public partial class App
{
protected override Window CreateShell()
{
return Container.Resolve<Shell>();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
}
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
moduleCatalog.AddModule<DataServiceModule>();
moduleCatalog.AddModule<UIModule>();
}
}
DataServiceModule. cs
public class DataServiceModule : IModule
{
public DataServiceModule()
{
}
public void OnInitialized(IContainerProvider containerProvider)
{
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterSingleton<IDBInteraction, DBInteraction>(typeof(DBInteraction).FullName);
}
}
UIModule.cs
public class UIModule : IModule
{
IRegionManager _regionManager;
public UIModule(IRegionManager regionManager)
{
_regionManager = regionManager;
}
public void OnInitialized(IContainerProvider containerProvider)
{
_regionManager.RegisterViewWithRegion(RegionNames.ShowStringRegion, typeof(ShowStringView));
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
ViewModelLocationProvider.Register<ShowStringView, ShowStringViewModel>();
}
}
ShowStringView.xaml
<UserControl x:Class="TP.UI.View.ShowStringView"
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:local="clr-namespace:TP.UI.View"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
mc:Ignorable="d">
<Grid>
<TextBox Text="{Binding Content}" Height="20" Width="150" BorderBrush="Black"/>
</Grid>
ShowStringViewModel
public class ShowStringViewModel : BindableBase
{
IDBInteraction _dBInteraction;
public ShowStringViewModel()
{
Content = "Hallo";
}
// It works when this ctor is comment-out
public ShowStringViewModel(IDBInteraction dBInteraction)
{
_dBInteraction = dBInteraction;
Content = "Hallo";
}
private string _content;
public string Content
{
get => _content;
set => SetProperty(ref _content, value);
}
}