mvvm-light View Model不是跨多个程序集的完全数据绑定

时间:2013-03-29 14:50:40

标签: c# wpf mvvm mvvm-light inotifypropertychanged

我们有一个项目具有这个项目组装结构:

  • 培训模式
  • 通过mvvm光视图模型/定位器将数据绑定到模型的XAML表单

一切正常。

在加载事件中,我们有效地重新分配模型:

ViewModelLocator.Main.Training = new Training();

这很好用,模型仍然全部绑定并更新以在表单上显示新数据。

我们希望将ViewModel移到其自己的项目/程序集中以获得整洁。即实现这个结构:

  • 培训模式
  • XAML表格
  • mvvm light view model / locator

这是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视图模型在另一个程序集中唯一不同的是什么?

由于

1 个答案:

答案 0 :(得分:1)

您需要将Training属性更改为:

public Training Training
{
    get
    {
        return this.training;
    }
    set
    {
        Set(()=>Training, ref this.training, value);
    }
}

以便提出属性更改通知。