0

コード内の別の場所で 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>();
    }
}
4

2 に答える 2