2017-08-31 48 views
0

我正在努力寻找最佳实现。棱镜 - 在视图模型之间移动数据

我使用棱镜,我有一个视图(ParentView),其中有一个小区域。根据ddl中的项目,另一个较小视图(ChildView)被注入到ParentView的区域中。

ChildView将只有一些属性,我想从父视图访问。

所以我意识到我可以使用发布/订阅方法来移动viewmodels之间的数据,但问题是我没有什么可以挂在发布上。该视图由文本框组成,没有事件触发器。基于ddl的选择,ChildView可能会有很大的不同。我喜欢每个ChildView的干净分离,因为它是在ParentView中注入自己的视图。

达到此目的的最佳方法是什么?

回答

0

一个解决方案可以是在您的视图模型中实现接口INavigationAware。之后,您可以使用onNavigatedFrom(),onNavigatedTo()和onNavigatingTo()方法来注册您的事件。

编辑:

如果你想启动事件时,在子场被改变,你可以做这样的事情:

private string _yourField; 

public string YourField 
     { 
      get { return _yourField; } 
      set { SetProperty(ref _yourField, value); 
        //Here you can launch the event 
       } 
     } 

在这种情况下,当YourField改变的情况下启动。

+0

我确实在想这件事。但是导航方法只有在ChildView被加载时才会被触发。我需要在填充后获取ChildView的属性值。 – theTechGrandma

+0

我编辑了我的回复。检查这是否可以成为您的一个很好的解决方案。 – TeoVr81

+0

谢谢!你很近。我在下面发布我的解决方案 – theTechGrandma

0

我尝试了一些实现,但工作的是创建ChildView(childviewmodel)的单例实例,然后通过实例获得对属性的访问权限。它可能不漂亮,但它的工作原理。

private static ChildViewModel _instance = new ChildViewModel(); 
    public static ChildViewModel Instance { get { return _instance; } } 

    #region Properties 

    private ChildModel _childModel= new ChildModel(); 
    public ChildModel _childModel 
    { 
     get { return _instance._childModel; } 
     set 
     { 
      SetProperty(ref _instance._childModel, value); 
     } 
    } 

    private string _childProperty1; 
    public string ChildProperty1 
    { 
     get { return _childProperty1; } 
     set 
     { 
      SetProperty(ref _childProperty1, value); 
      ChildModel.ChildProperty1= _childProperty1; 
     } 
    } 

在现实中 - 有很多儿童属性。我只列出了一个演示。然后我在ParentView中调用它

var _instance = ChildViewModel.Instance; 
var _cm = _instance.ChildModel; 

_parentModel = new ParentModel 
{ 
    Property1= ParentViewProperty1, 
    Property2= _cm.ChildProperty1, 
    }; 

希望能帮助别人。