我们有一个项目具有这个项目组装结构:
一切正常。
在加载事件中,我们有效地重新分配模型:
ViewModelLocator.Main.Training = new Training();
这很好用,模型仍然全部绑定并更新以在表单上显示新数据。
我们希望将ViewModel移到其自己的项目/程序集中以获得整洁。即实现这个结构:
这是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对象时,表单不会更新。
可能导致这种情况的原因是mvvw-light视图模型在另一个程序集中唯一不同的是什么?
由于
答案 0 :(得分:1)
您需要将Training
属性更改为:
public Training Training
{
get
{
return this.training;
}
set
{
Set(()=>Training, ref this.training, value);
}
}
以便提出属性更改通知。