您可以利用 EventAggregators 来实现这一点。
对于那些不熟悉的人,事件聚合器是一种提供
将对象从一个实体发布到另一个实体的能力
松散的时尚。
您可以阅读更多关于事件聚合器here
首先定义包含要传递的消息的 CustomMessage。
public class CustomMessage
{
public string String1 { get; set; }
}
现在您继续到 ParentViewModel 并创建事件聚合器的实例。
private IEventAggregator _eventAggregator;
[ImportingConstructor]
public ShellViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
_eventAggregator.Subscribe(this);
}
在绑定到文本框的属性的 Setter 中,您现在可以添加代码以使用事件聚合器发布消息。
例如,
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。