Bonjour

Le sujet a première vu a l'air bête.
Tout en gardant le model MVVM pour mon application j'aimerai pouvoir fermer un fenêtre.
La difficulté: aucun code behind contrairement à l'exemple ci-dessous
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
 
        MainWindow window = new MainWindow();
        var viewModel = new MainWindowViewModel();
        viewModel.RequestClose += window.Close;
        window.DataContext = viewModel;
 
        window.Show();
    }
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class MainWindowViewModel : ViewModelBase
{
    RelayCommand _closeCommand;
    public ICommand CloseCommand
    {
        get
        {
            if (_closeCommand == null)
            {
                _closeCommand = new RelayCommand(
                   param => Close(),
                   param => CanClose()
                   );
            }
            return _closeCommand;
        }
    }
 
    public event Action RequestClose;
 
    public virtual void Close()
    {
        if ( RequestClose!=null )
        {
            RequestClose();
        }
    }
 
    public virtual bool CanClose()
    {
        return true;
    }
}

Est-ce faisable ?

(ps: contrairement a l'exemple ci-dessus, mon DataContext est définit dans le code XAML)
Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
<Window.DataContext>
    <core:viewModel />
</Window.DataContext>

Merci