OK, das Hinzufügen des von E-Bat vorgeschlagenen Codes hatte also keine Auswirkungen, bis ich ein neues Projekt startete und den gesamten Code wörtlich kopierte. Ich kann nur davon ausgehen, dass es im ViewModelLocator auf http://prismlibrary.com/ Hintergrundcode geben muss, der nicht aktualisiert wurde, um den parameterlosen Konstruktor zu berücksichtigen. Ich hoffe, das hilft allen anderen, die das gleiche Problem haben.
Ursprüngliche Frage
Ich habe ein MVVM-Projekt mit Prism eingerichtet. Ich habe eine MainWindow.xaml und 5 Ansichten; ButtonsView, HeaderView, ProcessInputView, ProcessLogView und ProcessSelectionView, die ich verwende, jede Ansicht hat ein zugehöriges ViewModel.
MainWindow.xaml
Code: Select all
< /code>
< /p>
MainWindowViewModel < /p>
public class MainWindowViewModel: BindableBase
{
public IEventAggregator _events;
private UserPrincipal userPrincipal;
public MainWindowViewModel(IEventAggregator events)
{
_events = events;
userPrincipal = UserPrincipal.Current;
_events.GetEvent().Subscribe(HeaderHasBeenLoaded);
}
private void HeaderHasBeenLoaded()
{
_events.GetEvent().Publish(string.Format("{0} {1}", userPrincipal.GivenName, userPrincipal.Surname));
}
}
< /code>
Wenn ich versuche, den Mainwindow im Designmodus anzuzeigen. Ich erhalte den folgenden Fehler
Screenshot von MainWindow im Designmodus < /p>
Für dieses Objekt fand kein parameterloser Konstruktor - Dies zeigt die Headerview und die ButtonSView < /p>
Beide HeaderviewModel und ButtonSViewModel Take ieventaggregator als Parameter in ihrem Konstruktor, wobei wie als Der Rest der ViewModels nicht. Ich gehe davon aus, dass hier die Fehler kommen.public class HeaderViewModel: BindableBase
{
private string userName;
private string runTime;
public string UserName
{
get { return userName; }
set { SetProperty(ref userName, value); }
}
public string RunTime
{
get { return runTime; }
set { SetProperty(ref runTime, value); }
}
public HeaderViewModel(IEventAggregator events)
{
events.GetEvent().Subscribe(RunTimeUpdated);
events.GetEvent().Subscribe(UserNameUpdated);
events.GetEvent().Publish();
}
private void RunTimeUpdated(string newRunTime)
{
RunTime = newRunTime;
}
private void UserNameUpdated(string userName)
{
UserName = userName;
}
}
Muss ich dies im Bootstrap über eine Überschreibung der Methode „ConfigureContainer“ registrieren? Wenn ja, bin ich mir nicht ganz sicher, wie das geht.
Bootstrap
class Bootstraper: UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return Container.Resolve();
}
protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
}
< /code>
Die Anwendung erstellt erfolgreich und läuft erfolgreich aus, aber gerade beim Versuch, den Mainwindow im Designer anzusehen, erhalte ich diese Nachricht. < /p>
< Br /> Jede Hilfe wäre sehr geschätzt.>