Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# mvvm轻型视图模型未跨多个程序集完全绑定数据_C#_Wpf_Mvvm_Mvvm Light_Inotifypropertychanged - Fatal编程技术网

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灯光视图模型/定位器
以下是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;
        }
    }
}
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);
    }
}
以便引发属性更改通知