0

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

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

这一切都很好。

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

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;
        }
    }
}

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 是正确绑定到模型实例的数据。如上所示,在分配新的培训对象时,表单不会更新。

考虑到唯一不同的是 mvvw-light 视图模型在另一个程序集中,可能导致这种情况的原因是什么?

谢谢

4

1 回答 1

1

您需要将您的Training财产更改为:

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

以便引发属性更改通知。

于 2013-04-01T22:30:33.063 回答