C# mvvm轻型视图模型未跨多个程序集完全绑定数据
我们有一个具有此项目组装结构的项目:C# mvvm轻型视图模型未跨多个程序集完全绑定数据,c#,wpf,mvvm,mvvm-light,inotifypropertychanged,C#,Wpf,Mvvm,Mvvm Light,Inotifypropertychanged,我们有一个具有此项目组装结构的项目: 培训模式 XAML表单,通过mvvm灯光视图模型/定位器数据绑定到模型 这一切都很好 在加载事件中,我们重新分配模型,有效地: ViewModelLocator.Main.Training = new Training(); 这可以很好地工作,并且模型仍然处于绑定和更新状态,以在表单上显示新数据 我们希望将ViewModel从外部移动到其自己的项目/部件以保持整洁。即,实现此结构: 培训模式 XAML格式 mvvm灯光视图模型/定位器 以下是Vie
- 培训模式
- XAML表单,通过mvvm灯光视图模型/定位器数据绑定到模型
ViewModelLocator.Main.Training = new Training();
这可以很好地工作,并且模型仍然处于绑定和更新状态,以在表单上显示新数据
我们希望将ViewModel从外部移动到其自己的项目/部件以保持整洁。即,实现此结构:
- 培训模式
- XAML格式
- mvvm灯光视图模型/定位器
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;
}
}
}
public类MainViewModel:ViewModelBase
{
私人培训;
///
///初始化MainViewModel类的新实例。
///
公共主视图模型()
{
this.training=新培训();
}
公共培训
{
得到
{
归还此文件。培训;
}
设置
{
这就是培训=价值;
}
}
}
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
}
}
公共类ViewModelLocator
{
///
///初始化ViewModelLocator类的新实例。
///
公共ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(()=>SimpleIoc.Default);
SimpleIoc.Default.Register();
}
公共静态主视图模型主视图
{
得到
{
返回ServiceLocator.Current.GetInstance();
}
}
公共静态无效清除()
{
//要清除ViewModels,请执行以下操作:
}
}
当我将ViewModel移动到它自己的程序集中并运行项目时,在初始运行时,XAML将数据正确绑定到模型实例。在如上所示分配新的培训对象时,表单不会更新
考虑到唯一不同的是mvvw灯光视图模型位于另一个部件中,是什么导致了这种情况
谢谢您需要将
培训
属性更改为:
public Training Training
{
get
{
return this.training;
}
set
{
Set(()=>Training, ref this.training, value);
}
}
以便引发属性更改通知