View Models MVVM + Code Injection(Unity)之间的Fire事件。 UWP

时间:2017-11-01 11:49:27

标签: c# mvvm uwp unity-container code-injection

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

VMLocatos.cs

static VMLocator()
    {
        var container = new UnityContainer();
        container.RegisterType<IService, Service>();
        container.RegisterType<ContainerVM>();
        container.RegisterType<Child1VM>();
        container.RegisterType<Child2VM>();
    }
    ....

ContainerVM.cs

    ... Bindind in ContentControl the two user controls Child1V and child2V ..

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();    
    }

Child2VM.cs

   public Child2VM(IService service)
    {
        Elements= servce.GetElements();
    }
   public void refresh()
   {
     ...
   }

IService.cs

 List<Elemnents> GetElements();

我尝试在Iservice中创建一个属性,如:

int Update{ get; set; }

并在Service.cs中

  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;
        }
    }

我不知道是否使用了最好的方法,因为我没有找到关于使用来自其他viewmodel的unity和fire事件注入的文档。 感谢您的时间

0 个答案:

没有答案