WPF, MVVM und Prism - kein parameterloser Konstruktor für dieses Objekt definiertC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 WPF, MVVM und Prism - kein parameterloser Konstruktor für dieses Objekt definiert

Post by Anonymous »

Antwort
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;
}
}
Wie kann ich diesen Fehler umgehen, wenn ich diese Ereignisse abonnieren muss und daher den IEventAggregator an meine ViewModels übergeben muss?
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.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post