Caliburn.micro 父母->孩子和孩子->父母互动

M00

我正在使用 Caliburn.micro 开发 WPF 应用程序。在那里,我有一个扩展导体的 mainViewModel 和两个扩展屏幕的子视图模型。这两个视图模型由我的 MainViewModel 中的选项卡控件激活。我有属于 MainViewModel 的字符串,我需要将这些字符串传递给两个 subViewModel。我需要传递给 subViewModel 的字符串在 MainView 中绑定到文本框。我想将这些字符串传递给 subViewModel,即使这些字符串是从 MainViewModel 更改的,我也需要更新我的 subViewModel。现在我在每个子视图模型的构造函数中给出一个 MainViewModel 作为参数,但我很确定有更好的方法基本上我想将子属性绑定到父属性并报告其中任何一个属性是否在父视图或子视图模型中发生了更改。你能给我指出好的方向吗?

阿努维斯旺

您可以使用EventAggregators来实现这一点。

对于那些不熟悉的人,事件聚合器是一种服务,它提供了以松散的方式将对象从一个实体发布到另一个实体的能力。

您可以在此处阅读有关事件聚合器的更多信息

您首先定义包含要传递的消息的 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。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

选择一个父母和所有给定父母或孩子ID的孩子

来自分类Dev

让孩子与父母的点击事件

来自分类Dev

父母和孩子中的点击事件

来自分类Dev

SQL查询选择孩子和父母

来自分类Dev

MySQL从表中选择父母和孩子

来自分类Dev

父母对孩子的背景

来自分类Dev

显示隐形父母的孩子

来自分类Dev

获取特定孩子的父母和祖父母

来自分类Dev

让孩子和父母的父母一样宽

来自分类Dev

如何从孩子向父母的父母发送数据

来自分类Dev

苗条:在父母和孩子之间转移道具

来自分类Dev

Laravel,由父母和孩子获得结果

来自分类Dev

当父母和孩子都执行exec()时等待孩子

来自分类Dev

父母/孩子组合框

来自分类Dev

修改WordPress中父母和孩子的图标

来自分类Dev

我如何使用班级的父母和孩子?

来自分类Dev

选择一个父母和所有给定父母或孩子ID的孩子

来自分类Dev

父母和孩子的订单查询

来自分类Dev

父母对孩子的背景

来自分类Dev

让孩子修改其父母

来自分类Dev

如何从位置获取父母和孩子的ID

来自分类Dev

如何使用jQuery使孩子成为父母的父母?

来自分类Dev

固定父母身后的孩子

来自分类Dev

休眠检索父母/孩子

来自分类Dev

将孩子抛弃给父母

来自分类Dev

在孩子悬停时更改父母-父母背景

来自分类Dev

MySQL按父母和孩子排序

来自分类Dev

相对父母,绝对孩子

来自分类Dev

结合父母名单和孩子名单