残り僅かな全盛期

30代修行中の初心者プログラマー。いろいろなサイトを参考にコードを使用させてもらいます。

mvvm light toolkitの導入③

今回は別のウィンドウを作成して、
メイン画面から呼び出して表示してみる。

Viewフォルダに、SubView.xaml
ViewModelフォルダに、SubViewModel.csを追加する。

これらのViewとViewModelの紐付けをするために、
まずはViewModelLocatorにSubViewModelの情報を追加する。

static ViewModelLocator()
{
    ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

    if (ViewModelBase.IsInDesignModeStatic)
    {
        SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
    }
    else
    {
        SimpleIoc.Default.Register<IDataService, DataService>();
    }

    SimpleIoc.Default.Register<MainViewModel>();
    SimpleIoc.Default.Register<SubViewModel>();
}
public SubViewModel Sub
{
    get
    {
        return ServiceLocator.Current.GetInstance<SubViewModel>();
    }
}

次に、SubView.xamlのDataContext属性を修正する。

DataContext="{Binding Sub, Source={StaticResource Locator}}"


SubViewModelに画面表示用にプロパティを用意する。

    public class SubViewModel : ViewModelBase
    {
        private string _subText;
        public string SubText
        {
            get
            {
                return _subText;
            }
            set
            {
                _subText = value;
                RaisePropertyChanged("SubText");
            }
        }

        /// <summary>
        /// Initializes a new instance of the SubWindowViewModel class.
        /// </summary>
        public SubViewModel()
        {
            SubText = "これはSubです";
        }
    }
}

SubViewに、ViewModelで設定したテキストを表示するようなコントロールを用意してバインドする。

    <Grid>
        <TextBlock Text="{Binding SubText}"  HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Grid>

これで紐付けができたので、
App.xamlのStartupUriをSubView.xamlに変更すれば表示できる。


では、別の画面からこのSub画面を表示するにはどうしたらいいか。

まずはApp.xamlのStartupUriをMainWindow.xamlに戻す。
次に、MainViewModelにSub画面表示用のコマンドを用意する。

private RelayCommand _buttonClickCommand;

public RelayCommand ButtonClickCommand
{
    get
    {
        return _buttonClickCommand ?? (_buttonClickCommand = new RelayCommand(OnButtonClick));
    }
}

public void OnButtonClick()
{
    SubView v = new SubView();
    v.ShowDialog();
}

今回はViewModel側でSub画面のViewを生成してそれをShowする方法をとった。
他の方法もあるみたいだけど、今日はこれでいく。

最後に、MianWindow.xamlにボタンを用意して、コマンドを設定する。

<Button Content="Subを表示する" Command="{Binding ButtonClickCommand}" />