コード内の別の場所で ViewModelLocator のインスタンスを使用して、ViewModel のプロパティを変更することは可能ですか? 試してみると、割り当てようとした値は破棄されているようです。
たとえば、「Game」という名前のインスタンスが ViewModelLocator に含まれている ViewModel です。「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 で値が割り当てられていない場合、メッセージ ボックスは空で表示されます。いずれにせよ、「テスト中」は表示されません。
どうすればこれを機能させることができますか?Unity で MVVM Light を使用しています。
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>();
}
}