WindowService
- 3 minutes to read
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.
Get Started
Attach the Service
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:
<UserControl ... xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"> <Grid> <dxmvvm:Interaction.Behaviors> <dxmvvm:WindowService/> </dxmvvm:Interaction.Behaviors> ... </Grid> </UserControl>
Access the Service
Refer to the following topics for more information how to access a service in ViewModel.
- Services in ViewModelBase Descendants
- Services in Generated View Models
- Services in Custom ViewModels
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>(); } }
...
}
Display a Window
To display a window with a View, use one of the IWindowService‘s Show extension methods depending on your MVVM architecture:
Name | Description |
---|---|
| Use this method when the View is defined though the service’s ViewTemplate or ViewTemplateSelector property. The ViewModel is passed via the parameter. |
| Use this method when both the View and ViewModel are passed via the method’s parameters. |
| 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.
Manage the Displayed Window
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();
}
Adjust the Service Window
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>