それが一般的な方法で使用することができるようにあなたは、ダイアログとしてビューを起動するための独立したサービスを作成することができますアプリケーション全体でまた、ダイアログを起動したいコンストラクタ経由でこのサービスをViewModelに注入します。
public interface IDialogWindowService<T>
{
void Show();
void ShowDialog();
}
public class DialogWindowService<T> : IDialogWindowService<T> where T : Window
{
public void Show()
{
container.Resolve<T>().Show();
}
public void ShowDialog()
{
container.Resolve<T>().ShowDialog();
}
}
それはアプリケーション間で一般的な方法で使用することができるようにあなたは、ダイアログとしてビューを起動するための独立したサービスを作成することができます。また、ダイアログを起動したいコンストラクタ経由でこのサービスをViewModelに注入します。
public interface IDialogWindowService<T>
{
void Show();
void ShowDialog();
}
public class DialogWindowService<T> : IDialogWindowService<T> where T : Window
{
public void Show()
{
container.Resolve<T>().Show();
}
public void ShowDialog()
{
container.Resolve<T>().ShowDialog();
}
}
このサービスをそれぞれのビューモデルに挿入するだけです。
public class YourViewModel
{
//commands
public ICommand someCommand { get; set; }
private IDialogWindowService<BookingView> _dialogService;
public YourViewModel(IDialogWindowService<YourView > dialogService)
{
_dialogService = dialogService
someCommand = new RelayCommand(someCommandDoJob,() => true);
}
public void someCommandDoJob(object obj)
{
//Since you want to launch this view as dialog you can set its datacontext in its own constructor.
_dialogService.ShowDialog();
}
}
OR
あなたはビューを変更するDataTemplates
を使用することができます。これは、動的ViewModel
に応じViews
を切り替えることができます:
<Window>
<Window.Resources>
<DataTemplate DataType="{x:Type ViewModelA}">
<localControls:ViewAUserControl/>
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModelB}">
<localControls:ViewBUserControl/>
</DataTemplate>
<Window.Resources>
<ContentPresenter Content="{Binding CurrentView}"/>
</Window>
Window.DataContextはViewModelAのインスタンスである場合、ViewAが表示され、
Window.DataContextはViewModelBのインスタンスであり、次いでViewBう表示されます。
私が今までに見て読んだ最良の例は、レイチェム・リムによって作られたものです。 See the example.
を無効にしたい場合は、それはMVVMのために、新しいウィンドウを開くことになると、それがトリッキーになります。主な理由の1つは、 'DataTemplate'では' Window'派生クラスを内部で定義することができないということです。ネット上にはさまざまな方法を提供する記事がたくさんあります。私は最初にそれらを読んでみることをお勧めします。それぞれの方法には長所と短所があり、一般的に100%MVVMの原則にも従っていません。 – Jai