Общий дочерний ViewModel в ShellViewmodel на caliburn.Micro - PullRequest
0 голосов
/ 17 июня 2019

Как дочерний ViewModel делится информацией DataGrid.selectedItem с родительским ViewModel в Caliburn.Micro?

1 Ответ

0 голосов
/ 17 июня 2019

Вы можете использовать Event Aggregators для этой цели. В вашем текущем сценарии вы могли бы начать с объявления объекта Message, который будет использоваться для передачи информации между моделями представления Child и Parent.

public class SelectedItemChangedMessage<T>
{
    public T SelectedItem;
}

Чтобы опубликовать сообщение, вы можете использовать класс EventAggregator. Например, вы можете сделать следующее из ChildViewModel.

public class ChildViewModel
{
        private IEventAggregator _eventAggregator;
        public ChildViewModel(IEventAggregator eventAggregator)
        {
            _eventAggregator = eventAggregator;
        }
        public void Change()
        {
            _eventAggregator.PublishOnUIThread(new SelectedItemChangedMessage<string>(){ SelectedItem = selectedItem });
        }
}

А затем в вашей ParentViewModel вам нужно будет подписаться на EventAggregator

public class ShellViewModel:Screen, IHandle<SelectedItemChangedMessage<string>>
{
        private IEventAggregator _eventAggregator;
        public ShellViewModel(IEventAggregator eventAggregator)
        {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(this);
        }

        public void Handle(SelectedItemChangedMessage<string> message)
        {
            Debug.WriteLine($"Item Changed, current selection : {message}");
        }
}
...