C# 视图模型MVVM和x2B之间的触发事件;代码注入(Unity)。超宽带

C# 视图模型MVVM和x2B之间的触发事件;代码注入(Unity)。超宽带,c#,mvvm,uwp,unity-container,code-injection,C#,Mvvm,Uwp,Unity Container,Code Injection,我有下一个结构。有两个孩子的容器。我希望当我在child1元素中单击时,child2刷新数据 VMLocatos.cs static VMLocator() { var container = new UnityContainer(); container.RegisterType<IService, Service>(); container.RegisterType<ContainerVM>();

我有下一个结构。有两个孩子的容器。我希望当我在child1元素中单击时,child2刷新数据

VMLocatos.cs

static VMLocator()
    {
        var container = new UnityContainer();
        container.RegisterType<IService, Service>();
        container.RegisterType<ContainerVM>();
        container.RegisterType<Child1VM>();
        container.RegisterType<Child2VM>();
    }
    ....
Child1VM ... 此vm有一个列表视图可供选择

 public Child1VM(IService service)
    {
       ...
       MenuItemClick = new DelegateCommands<ItemClickEventArgs>
       (OnItemClicked,()=>true);
    }
   private void OnItemClicked(ItemClickEventArgs args)
    {
        MenuItem a =(MenuItem) args.ClickedItem ;
        Call To Child2VM.Refresh();    
    }
IService.cs

 List<Elemnents> GetElements();
  public int Update
    {
        get
        { return _uptate; }
        set
        {
            _update= value;
            RaisePropertyChanged();
        }
    }
    public void RaisePropertyChanged([CallerMemberName]string propertyName = "")
    {
        var Handler = PropertyChanged;
        // Handler is always null
        if (Handler != null)
            Handler(this, new PropertyChangedEventArgs(propertyName));
    }
和在役.cs

 List<Elemnents> GetElements();
  public int Update
    {
        get
        { return _uptate; }
        set
        {
            _update= value;
            RaisePropertyChanged();
        }
    }
    public void RaisePropertyChanged([CallerMemberName]string propertyName = "")
    {
        var Handler = PropertyChanged;
        // Handler is always null
        if (Handler != null)
            Handler(this, new PropertyChangedEventArgs(propertyName));
    }
并从ChildVM1更新该变量

service.Update = 1;
并从ChildVM2尝试订阅属性更改

 Update = service.Update;

 public int Update
    {
        get
        {
            No fired when change the variable in service
            return _update;
        }
        set
        {
            No fired when change the variable in service
            update = value;
        }
    }
我不知道a是否使用最佳方法,因为我没有从其他viewmodel中找到关于unity注入和fire事件的文档。
感谢您的时间

您可以在Unity上使用Prism,它有类似EventAggregator的功能,可以做到这一点。您还可以使用RX,以便VM2订阅服务中的观察者,而VM1会导致调用服务,刷新基础数据源并将其发布回观察者,然后VM2再次拾取它。解决这个问题的方法可能比你目前的方法更好。非常感谢。使用Prism和EventAggregator可以很好地工作。您可以在Unity上使用Prism,Unity具有类似EventAggregator的功能,可以做到这一点。您还可以使用RX,以便VM2订阅服务中的观察者,而VM1会导致调用服务,刷新基础数据源并将其发布回观察者,然后VM2再次拾取它。解决这个问题的方法可能比你目前的方法更好。非常感谢。使用Prism和EventAggregator可以很好地工作。
 Update = service.Update;

 public int Update
    {
        get
        {
            No fired when change the variable in service
            return _update;
        }
        set
        {
            No fired when change the variable in service
            update = value;
        }
    }