Caliburn.micro родитель-> ребенок и ребенок-> родитель взаимодействия

CollectionName.find({
    created_at: {
        $gte:$mongostartdate,
        $lt: mongoenddate
    }
})
-1
задан M00 19 January 2019 в 22:31
поделиться

1 ответ

Вы можете использовать EventAggregators для достижения этой цели.

Для тех, кто незнаком, Event Aggregator - это служба, которая предоставляет возможность публиковать объект от одного объекта к другому свободно основанным образом.

Подробнее об агрегаторах событий можно прочитать здесь

Вы начинаете с определения своего CustomMessage, которое будет содержать сообщение, которое нужно передать.

public class CustomMessage
{
    public string String1 { get; set; }
}

Теперь вы переходите к ParentViewModel и создаете экземпляр агрегатора событий.

private IEventAggregator _eventAggregator;
[ImportingConstructor]
public ShellViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
_eventAggregator.Subscribe(this);
}

В установщике вашего свойства, которое привязано к вашему текстовому полю, вы теперь добавите код для публикации сообщения с помощью Event Aggregator.

Например,

public string String1
{
    get => _string1;
    set
    {
        if (_string1.Equals(value)) return;

        _string1 = value;
        _eventAggregator.PublishOnUIThread(new CustomMessage
        {
            String1 = _string1,
        });

    }

}

Теперь вы направляетесь к своей модели детского представления и подписываетесь на агрегатор событий.

private IEventAggregator _eventAggregator;
[ImportingConstructor]
public SecondWinViewModel(IEventAggregator eventAggregator)
{
    _eventAggregator = eventAggregator;
    _eventAggregator.Subscribe(this);
}

Чтобы подписаться на конкретное сообщение (в данном случае CustomMessage), вам необходимо реализовать интерфейс IHandle.

[Export(typeof(SecondWinViewModel))]
public class SecondWinViewModel : Screen, IHandle<CustomMessage>

Для интерфейса требуется один метод, который вы бы использовали для получения сообщения и обновления обязательного свойства в вашем дочернем окне.

public void Handle(CustomMessage message)
{
    String1 = message.String1;
    NotifyOfPropertyChange(nameof(String1));
}

Вы можете сделать то же самое для нескольких параметров, добавив больше свойств в ваше CustomMessage. Таким же образом вы можете передавать сообщения от Child Vm к Parent Vm.

0
ответ дан Anu Viswan 19 January 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: