Bonjour,
Je débute en MVVM je ne sais pas si c'est une bonne solution mais déjà actuellement mon code est entièrement passer dans mes ViewModel et pour ouvrir une fenêtre j'exécute donc le code suivant:
1 2 3 4 5 6
| Window myWindow = new MyWindow();
ViewModelBase viewModelMyWindow = new ViewModelMyWindow();
viewModelMyWindow.RequestClose += myWindow.Close;
myWindow.DataContext = viewModelMyWindow;
videoCapture.Show(); |
Cette ligne viewModelMyWindow.RequestClose += myWindow.Close; est normal car j'ai modifier mon ViewModelBase pour une méthode commune, celle de Close(): pour fermer une fenêtre.
Sinon je pensait modifier plus tard mon code de la façon suivante
[mon ViewModel]
1 2
| Window myWindow = new MyWindow ();
videoCapture.Show(); |
[C# de myWindow.xaml]
1 2 3
| ViewModelBase viewModelMyWindow = new ViewModelMyWindow();
viewModelMyWindow.RequestClose += this.Close;
this.DataContext = viewModelMyWindow; |
Je n'ai pas encore tester cette solution et je devrai d'ailleur pour voir si derrière Blend voit mieux certain élément car actuellement il ne voit rien chez moi.
Et pour les curieux mes lignes que j'ai ajouter dans le ViewModelBase:
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #region Member Fields
/// <summary>
/// The variable that is use to store the Command.
/// </summary>
private RelayCommand m_CommandClose;
/// <summary>
/// The variable for Action close request.
/// </summary>
public event Action RequestClose;
#endregion
#region Properties
/// <summary>
/// Gets the close command.
/// </summary>
/// <value>The close command.</value>
public ICommand CommandCloseWindow
{
get
{
if (m_CommandClose == null)
{
m_CommandClose = new RelayCommand(param => CanClose(), param => Close());
}
return m_CommandClose;
}
}
#endregion
#region Event Handlers
/// <summary>
/// Determines whether window can be close.
/// </summary>
/// <returns>
/// <c>true</c> if window can be close; otherwise, <c>false</c>.
/// </returns>
public virtual bool CanClose()
{
return true;
}
/// <summary>
/// Close the window.
/// </summary>
public virtual void Close()
{
if (RequestClose != null)
{
RequestClose();
}
}
#endregion |
comme cela dans mes xaml j'ai un bouton écrit comme cela
<Button Command="{Binding CommandCloseWindow}" Content="Close" />
Partager