Back to Devexpress

CurrentWindowService

wpf-401017-mvvm-framework-services-predefined-set-currentwindowservice.md

latest5.0 KB
Original Source

CurrentWindowService

  • Oct 07, 2021
  • 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:

xaml
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.

xaml
<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

| | --- | --- | |

Activate()

|

Activates the associated window.

| |

Close()

|

Closes the associated window.

| |

Hide()

|

Hides the associated window.

| |

WindowState

|

Gets or sets the associated window’s state.

| |

Show()

|

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.

csharp
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();
    }
}
vb
Public Class ViewModel
    Inherits ViewModelBase

    Public Property CloseCommand As ICommand
    Protected ReadOnly Property CurrentWindowService() As ICurrentWindowService
        Get
            Return GetService(Of ICurrentWindowService)()
        End Get
    End Property

    Public Sub New()
        CloseCommand = New DelegateCommand(AddressOf Close)
    End Sub

    Sub Close()
        If CurrentWindowService IsNot Nothing Then
            CurrentWindowService.Close()
        End If
    End Sub
End Class

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.

xaml
<dxmvvm:Interaction.Behaviors>
    <dxmvvm:CurrentWindowService ClosingCommand="{Binding ClosingCommand}"/>
</dxmvvm:Interaction.Behaviors>

See Also

CurrentDialogService