Prism 5.0包装ViewModel中的模型属性

时间:2016-12-08 16:51:56

标签: c# wpf mvvm

您好我对Prism相对较新,但这是我的问题:

我目前正在使用Prism 5和WPF。我创建了一个模型,视图模型和视图。当模型中的属性发生更改时,视图会更新。我的问题是:当我想从模型处理属性(例如另一个属性名称)时,视图不会更新。继承我的守则。如果你能帮助我,我会非常讨厌。

当模型中的RunTinting发生更改时,视图不会更新。

模型

public class MyModel :BindableBase

{               
    private Boolean _RunTinting;
    public Boolean RunTinting
    {
        get { return _RunTinting; }
        set { SetProperty(ref _RunTinting, value); }
    }

视图模型

public class MainWindowViewModel : BindableBase
{

    private MyModel model;
    public MyModel Model
    {
        get { return this.model; }
        set { SetProperty(ref this.model, value); }
    }

    public MainWindowViewModel()
    {
        this.Model=new MyModel();

    }


    public Boolean RunTinting2
    {
        get { return this.model.RunTinting; }
        set { SetProperty(ref this._RunTinting, value); }
    }

 }

XAML

<Label x:Name="label1_Copy11" Content="{Binding RunTinting2}" HorizontalAlignment="Left" Margin="366,320,0,0" VerticalAlignment="Top" Height="25" Width="85" >

2 个答案:

答案 0 :(得分:0)

如果动态设置 model 属性,视图应该绑定到此属性而不是视图模型属性:

<Label x:Name="label1_Copy11" Content="{Binding Model.RunTinting}" HorizontalAlignment="Left" Margin="366,320,0,0" VerticalAlignment="Top" Height="25" Width="85" >

因为当模型的属性设置为新值时,视图模型不会引发任何更改通知。

另一个选项是通过视图模型的包装属性设置模型属性,即不直接设置模型属性,而是设置视图模型属性。确保然后在包装器属性的setter中设置模型的属性,并为视图绑定到的视图模型属性引发PropertyChanged事件:

public class MainWindowViewModel : BindableBase
{
...
   public Boolean RunTinting2
  {
    get { return this.model.RunTinting; }
    set { this.model.RunTinting = value; OnPropertyChanged("RunTinting2"); }
  }
}

<Label x:Name="label1_Copy11" Content="{Binding RunTinting2}" HorizontalAlignment="Left" Margin="366,320,0,0" VerticalAlignment="Top" Height="25" Width="85" >

答案 1 :(得分:-2)

这就是我解决这个问题的方法,谢谢Rachel和Will。

视图模型

    public void InitModel()
    {
        Model.PropertyChanged += Model_PropertyChanged;
    }

    private void Model_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName == "RunTinting")
        { 
            OnPropertyChanged("RunTinting2");
        }

    }

@ mm8,我尝试了你的解决方案,但它没有用......但是无论如何都要感谢你所花的时间。

我不知道为什么我的答案有负面评价。它工作并尊重mvvm模型!