CurrentWindowService
- 3 minutes to read
The CurrentWindowService allows you to control the associated window at the View Model level. The CurrentWindowService implements the ICurrentWindowService interface.
Attach the Service
To control a current window from a ViewModel, use the CurrentWindowService. For this, attach the CurrentWindowService service to your View (window). You can do this in the following ways:
attach the CurrentWindowService service to a View with the the Quick Actions
declare the CurrentWindowService service manually (add the service to the Interaction.Behaviors collection or set Interaction.BehaviorsTemplate) as follows:
xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
...
<Grid>
<Grid.DataContext>
<local:ViewModel />
</Grid.DataContext>
<dxmvvm:Interaction.Behaviors>
<dxmvvm:CurrentWindowService />
</dxmvvm:Interaction.Behaviors>
<Button Command="{Binding CloseCommand}"/>
</Grid>
You can attach the CurrentWindowService to any object within a window, like in the code sample above.
To attach the service to another window, use any of the following.
- Pass the required window to the service’s Window property.
- Pass any child object within the required window to the service’s WindowSource property.
In the code sample below, the CurrentWindowService is attached to the main window.
<dxmvvm:CurrentWindowService Window="{Binding Source={x:Static Application.Current}, Path=MainWindow}" />
Access the Service
Refer to the following topics for more information how to access a service in ViewModel.
Manage the Current Window
The ICurrentWindowService interface provides a set of members useful to manipulate (for example, close or hide it) the current window in code.
Name | Description |
---|---|
Activates the associated window. | |
Closes the associated window. | |
Hides the associated window. | |
Gets or sets the associated window’s state. | |
Shows the hidden associated window. |
The code sample below shows how to access the service from a ViewModel that is a DevExpress.Mvvm.ViewModelBase descendant and how to close the current window from code.
public class ViewModel : ViewModelBase {
public ICommand CloseCommand { get; private set; }
protected ICurrentWindowService CurrentWindowService { get { return GetService<ICurrentWindowService>(); } }
public ViewModel() {
CloseCommand = new DelegateCommand(Close);
}
void Close() {
if (CurrentWindowService != null)
CurrentWindowService.Close();
}
}
If you want to perform certain actions at the ViewModel level when the parent window is closed or prevent a window from being closed, bind the CurrentWindowService’s ClosingCommand property to a corresponding command in your ViewModel.
<dxmvvm:Interaction.Behaviors>
<dxmvvm:CurrentWindowService ClosingCommand="{Binding ClosingCommand}"/>
</dxmvvm:Interaction.Behaviors>