是否可以通过在代码中的其他位置使用 ViewModelLocator 的实例来修改 ViewModel 的属性?当我尝试时,我尝试分配的任何值似乎都被丢弃了。
例如,一个 ViewModel,一个名为“Game”的实例包含在我的 ViewModelLocator 中。它有一个名为“Test”的字符串属性。当我尝试以这种方式修改它时:
(App.Current.Resources["Locator"] as ViewModelLocator).Game.Test = "Testing";
System.Windows.MessageBox.Show((App.Current.Resources["Locator"] as ViewModelLocator).Game.Test);
或者
ViewModelLocator _viewModelLocator = new ViewModelLocator();
_viewModelLocator.Game.Test = "Testing";
System.Windows.MessageBox.Show(_viewModelLocator.Game.Test);
消息框显示在 ViewModel 本身中声明的字符串的值(如果有的话)。如果未在 ViewModel 中分配值,则消息框显示为空。无论哪种方式,它们都不会显示“测试”。
我怎样才能使这项工作?我正在将 MVVM Light 与 Unity 一起使用。
public class ViewModelLocator
{
private static Bootstrapper _bootstrapper;
static ViewModelLocator()
{
if (_bootstrapper == null)
_bootstrapper = new Bootstrapper();
}
public GameViewModel Game
{
get { return _bootstrapper.Container.Resolve<GameViewModel>(); }
}
}
public class Bootstrapper
{
public IUnityContainer Container { get; set; }
public Bootstrapper()
{
Container = new UnityContainer();
ConfigureContainer();
}
private void ConfigureContainer()
{
Container.RegisterType<GameViewModel>();
}
}