2015-06-30 83 views
0

在运行时更改模型实例是否正确?我的控制被绑定到第一个实例,但在程序执行期间,我想将它们绑定到另一个实例。在运行时更改模型实例?

somewheere在ViewModel类:

//ViewDefault - already initialized 
// View - will be ready later 

public string TextProperty 
{ 
get 
      { 
       if (View != null) 
       { 
        return View.Model.text; 
       } return ViewDefault.Model.text; 
      } 
      set 
      { 
       if(View != null) 
        { 
        //.. logic with View.Model.text 
        }else{ 
         // logic with ViewDefault.Model.text 
        } 
        RaiseOnPropertyChanged("TextProperty"); 
} 

的问题是 - 我必须做通知我的观点,即绑定内容的改变?

<Setter Property="Text" Value="{Binding MyViewModel.TextProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 

* ViewDefault.Model和View.Model有一种类型的

+0

你为什么要更改的情况下产生的呢? –

回答

0

在我的角度来看一个ViewModel链接ViewModel所以如果我不得不改变我Model将创建一个新的ViewModel和将它附加到视图的DataContext。

的观点应该由一个人(一个最好的工厂)和一个创建视图也应该被创建的datacontext和连接它做

View view = new View(); 
view.DataContext = new ViewModel(); 
+0

如何在运行时附加View的DataContext(来自源代码)?它事先在xaml中预先定义了 – curiousity

+0

这几乎总是一个糟糕的决定。请检查我的更新回答 –

+0

我会[不同意](http://stackoverflow.com/q/13085670/1997232):viewmodel主要是服务*视图*。 Single ViewModel可以处理多个模型。每个视图具有多个ViewModel的想法*对我来说很难闻。 View使用绑定来绑定ViewModel中的一个属性。什么属性返回(ModelA属性或ModelB属性) - 视图*无关紧要*。此外,绑定[xaml中的数据源](http://stackoverflow.com/a/4590558/1997232)没有什么不好。答案的这两个原因和非常*抽象*的性质使我想要低估答案。我可以吗? – Sinatr