2016-09-12 7 views
1

При попытке построить eventaggregator иметь свойства моего object быть переданы от MainViewModel к SectionViewModel Я попытался следующие множества статей (1, 2, 3 и 4) относительно того, как это работает, но мне кажется, я безвестно отсутствующим шаг ..?Не удалось найти GetEvent <SetObjectEvent> (отсутствует директива/ссылка?) - что я делаю неправильно ...?

В MainViewModel У меня есть;

protected readonly IEventAggregator eventAggregator; 
public MainViewModel(IMainViewModel mainViewModel, IEventAggregator eventAggregator) 
{ 
    ...Some other Code... 
    this.eventAggregator = eventAggegator; 
} 

public Object Object 
{ 
    ...Getter... 
    set 
    { 
     this.object = value; 
     this.RaisePropertyChanged(); 
     this.EventAggregator.GetEvent<SetObjectEvent<Object>>().Publish(this.Object); 
    } 
} 

и в SectionViewModel У меня есть;

protected readonly IEventAggregator eventAggregator; 
public SectionViewModel(ISectionViewModel sectionViewModel, IEventAggregator eventAggregator) 
{ 
    this.eventAggregator = eventAggregator;; 
    this.eventAggregator.GetEvent<SetObjectEvent<Object>>().Subscribe((object) => { this.Object = object; }); 
} 

кого как бросить аргумент excpetion The type or namespace name 'SetObjectEvent<>' could not be found. Я думал, что это потому, что мне нужен глобальный EventAggregator, но кто-то заметил, что это не так.

Это настоящая статья большинства статей, которая (по крайней мере для меня) не похожа на причинение каких-либо проблем. Мне все это кажется вполне логичным, и я понимаю, что он должен делать. Однако ни одна из статей, по-видимому, не определяет «SetObjectEvent» Event? Вместо этого создайте какой-то общий EventAggregate и все. Вот где я как бы теряю след в том, что происходит. Для меня это звучит довольно логично, мне нужно иметь класс, похожий на «События», который может содержать все различные вызываемые события в проекте, но я бы не знал, как это сделать?

Редактировать; Поскольку this answer подразумевал, что то, что я считаю неправильным, не проблема, я перефразировал свой вопрос, чтобы более точно (?) Описать мою проблему.

Редактировать; В соответствии с поручением класс SetObjectEvent

public class SetObjectEvent<TRequest> : PubSubEvent<SetObjectEvent<TRequest>> where TRequest : IObject {} 

, полученный из this SO article

Edit; изменяя его

public class SetObjectEvent : PubSubEvent<Object> {} 

как предложено в нескольких комментариях дает мне такое же исключение аргумента как на GetEvent<SetObjectEvent>() и GetEvent<SetObjectEvent<Object>>()

+0

Вы можете скопировать вставить класс SetObjectEvent и сказать нам, где она определяется? – Igor

+0

@Igor отредактировал его в главном сообщении – Ciphra

+0

Похоже, что это должно быть 'public class SetObjectEvent: PubSubEvent {}' – dvorn

ответ

1

Как оказалось, проблема была где (и только немного, как *)

я имел SetObjectEvent помещенного в директиве модели, потому что я понял, что это было модель для мероприятия. Я предположил, что он будет правильно ссылаться на using MyProject.MyModule.Models; в пространстве имен MainViewModel. Оказывается, я ошибся, просматривая еще несколько статей SO относительно EventAggragator. SetObjectEvent должен находиться в пространстве имен модулей как namespace MyProject.MyModule.SetObjectEvent.

* Казалось бы, это должно быть SetObjectEvent общественный класс: PubSubEvent {} - dvorn

-1

EventAggregator класс делает все это для вас. Внутри она имеет «события» словарь

+0

Я получаю 'Тип или имя пространства имен 'SetObjectEvent <>' не удалось найти' при компиляции. Я знаю, это потому, что на данный момент у меня нет экземпляра экземпляра EventAggregator, но после его использования в классе ApplicationServices он дал мне то же самое, хотя он «обещал» решить проблему, не имея контейнер IoC. – Ciphra

+0

Как вы определили свое событие SetObjectEvent? Вы должны получить из 'PubSubEvent '. См. Https://github.com/PrismLibrary/Prism/blob/master/Documentation/WPF/70-CommunicatingBetweenLooselyCoupledComponents.md#creating-and-publishing-events – dvorn

 Смежные вопросы

  • Нет связанных вопросов^_^