我们有一个项目,它具有这样的项目程序集结构:
- <
- 培训模型/gh>
- XAML表单,通过mvvm光照视图模型/定位器绑定到模型
一切正常
在加载事件中,我们重新分配模型,有效地:
ViewModelLocator.Main.Training = new Training();
这工作得很好,模型仍然是所有绑定和更新,以显示表单上的新数据。
为了整洁,我们想把ViewModel移到它自己的项目/程序集中。即实现如下结构:
- <
- 培训模型/gh>
- XAML表单
- mvvm灯光视图模型/定位器
这是ViewModel:
public class MainViewModel : ViewModelBase
{
private Training training;
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel()
{
this.training = new Training();
}
public Training Training
{
get
{
return this.training;
}
set
{
this.training = value;
}
}
}
ViewModel有一个默认的定位器:
public class ViewModelLocator
{
/// <summary>
/// Initializes a new instance of the ViewModelLocator class.
/// </summary>
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<MainViewModel>();
}
public static MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}
public static void Cleanup()
{
// TODO Clear the ViewModels
}
}
当我将ViewModel移动到它自己的程序集中并运行项目时,在初始运行时,XAML的数据被正确绑定到模型实例。在如上所示分配新的Training对象时,表单不会更新。
考虑到唯一不同的是mvw -light视图模型在另一个程序集中,什么可能导致这种情况?
谢谢
您需要将您的Training
属性更改为:
public Training Training
{
get
{
return this.training;
}
set
{
Set(()=>Training, ref this.training, value);
}
}