WPF, MVVM и PRISM - Без параметраC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 WPF, MVVM и PRISM - Без параметра

Сообщение Anonymous »

Ответ
Хорошо, поэтому добавление предложенного кода, предоставленного E-Bat, не имело никакого эффекта, пока я не начал новый проект и не скопировал весь код дословно. Я могу только предположить, что в ViewModelLocator на http://prismlibrary.com/ должен быть какой-то фоновый код, который не обновлялся, чтобы учитывать конструктор без параметров. Надеюсь, это поможет кому-нибудь еще с той же проблемой.

Оригинальный вопрос
Я создал проект MVVM с использованием призмы. У меня есть MainWindow.xaml и 5 представлений; ButtonsView, HeaderView, ProcessInputView, ProcessLogView и ProcessSelectionView, которые я использую, каждое представление имеет связанную ViewModel.

MainWindow.xaml


MainWindowViewModel

Код: Выделить всё

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));
}
}
Когда я пытаюсь просмотреть главное окно в режиме разработки, я получаю следующую ошибку.
Снимок экрана главного окна в режиме разработки

Для этого объекта не найден конструктор без параметров — это выделяет HeaderView и ButtonsView

И HeaderViewModel, и ButtonsViewModel принимают IEventAggregator в качестве параметр внутри их конструктора, в отличие от остальных моделей представления. Я предполагаю, что именно отсюда и возникают ошибки.

HeaderViewModel

Код: Выделить всё

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;
}
}
< /code>

Итак, как я могу донести эту ошибку, если мне нужно подписаться на эти события, и, следовательно, нужен Ieventaggregator, передан в мои ViewModels? < /p>
Br />  мне нужно зарегистрировать это в начальной загрузке с помощью переопределения метода ConfigureContainer?  Если это так, я не совсем уверен, как это сделать.  < /P>

bootstrap < /p>

class Bootstraper: UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return Container.Resolve();
}

protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
}
Приложение успешно собирается и успешно запускается, но это сообщение появляется только при попытке просмотреть MainWindow в дизайнере.
Буду очень признателен за любую помощь.
РЕДАКТИРОВАТЬ
Все мои конструкторы представлений имеют только методы initalizeComponent и не принимают никаких параметров

Подробнее здесь: https://stackoverflow.com/questions/412 ... his-object
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»