您好我对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" >
答案 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模型!