wpf-401015-mvvm-framework-services-predefined-set-windowservice.md
The WindowService allows you to show your view as a window, and control the displayed window from the ViewModel.
The WindowService service implements the IWindowService interface.
To show a window from a ViewModel, use the WindowService. For this assign the WindowService service to your View. You can do this in the following ways:
attach the WindowService service to a View with Quick Actions
declare the WindowService service manually as follows:
Refer to the following topics for more information how to access a service in ViewModel.
The code sample below shows how to access the service from a ViewModel that is a DevExpress.Mvvm.ViewModelBase descendant:
public class MainViewModel : ViewModelBase {
protected IWindowService WindowService { get { return this.GetService<IWindowService>(); } }
...
}
To display a window with a View, use one of the IWindowService ‘s Show extension methods depending on your MVVM architecture:
|
Name
|
Description
| | --- | --- | |
Show(object viewModel)
|
Use this method when the View is defined though the service’s ViewTemplate or ViewTemplateSelector property. The ViewModel is passed via the parameter.
| |
Show(string documentType, object viewModel)
|
Use this method when both the View and ViewModel are passed via the method’s parameters.
| |
Show(string documentType, object parameter, object parentViewModel)
|
Use this method when the View, parameter, and parent ViewModel are passed via the method’s parameters. The ViewModel is explicitly specified at the View’s level.
|
protected IWindowService WindowService { get { return this.GetService<IWindowService>(); } }
public void ShowChildWindow() {
if(ChildWindowViewModel == null)
ChildWindowViewModel = new ChildViewModel() { Caption = "Hello, World!" };
WindowService.Show("ChildView", ChildWindowViewModel);
}
Refer to the following help topic for more information on how to pass a View to the Show method: ViewLocator.
The IWindowService interface provides a set of members useful to manipulate (for example, close or activate it) the displayed window in code.
The code sample below demonstrates how to close the displayed window from code.
protected IWindowService WindowService { get { return this.GetService<IWindowService>(); } }
void CloseChildWindow() {
ChildWindowViewModel = null;
WindowService.Close();
}
Use the following WindowService properties that allow you to configure your service window.
|
Name
|
Description
| | --- | --- | |
|
Specifies the position of the service window when it is first shown.
| |
|
Specifies if the service’s window owner is assigned automatically.
| |
|
Specifies the service’s window type.
| |
|
Specifies the service’s window style.
| |
|
Specifies the service’s window title.
| |
|
Specifies if the service’s window is modal or modeless.
|
<UserControl ...
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm">
<Grid>
<dxmvvm:Interaction.Behaviors>
<dxmvvm:WindowService AllowSetWindowOwner="True"
WindowStartupLocation="CenterOwner">
<dxmvvm:WindowService.WindowStyle>
<Style TargetType="dx:ThemedWindow">
<Setter Property="Width" Value="500" />
<Setter Property="Height" Value="300" />
</Style>
</dxmvvm:WindowService.WindowStyle>
</dxmvvm:WindowService>
</dxmvvm:Interaction.Behaviors>
...
</Grid>
</UserControl>