Il y a aussi cette façon de spécifier le modèle de vue :
using Wpf = System.Windows;
public partial class App : Wpf.Application //your skeleton app already has this.
{
protected override void OnStartup( Wpf.StartupEventArgs e ) //you need to add this.
{
base.OnStartup( e );
MainWindow = new MainView();
MainWindow.DataContext = new MainViewModel( e.Args );
MainWindow.Show();
}
}
<Rant>
Toutes les solutions proposées précédemment exigent que MainViewModel
doit avoir un constructeur sans paramètre.
Microsoft a l'impression que les systèmes peuvent être construits à l'aide de constructeurs sans paramètres. Si vous avez également cette impression, allez-y et utilisez d'autres solutions.
Pour ceux qui savent que les constructeurs doivent avoir des paramètres et que, par conséquent, l'instanciation des objets ne peut être laissée entre les mains de frameworks magiques, la manière correcte de spécifier le viewmodel est celle que j'ai montrée ci-dessus.
</Rant>
0 votes
Pour faire suite à Mike Nakis, j'ai essayé de créer le ViewModel manuellement et de m'abonner à des événements dans celui-ci, mais je me suis aperçu que le framework créait un autre ViewModel. Par conséquent, le ViewModel auquel j'étais abonné n'était pas celui qui était attaché à la vue.
0 votes
Est-ce que ça veut dire qu'en plus d'instancier le modèle de vue vous-même, vous étiez également spécifier le type du modèle de vue d'une autre manière ? Un autre avantage des modèles de vue nécessitant des paramètres de construction est que le framework ne peut pas les instancier, ou bien il doit passer des valeurs par défaut pour ces paramètres, auquel cas vous pouvez facilement détecter l'instanciation par le framework.
0 votes
Le concepteur XAML pourrait aussi avoir besoin de pouvoir instancier des modèles de vue, mais ce concepteur n'a jamais été d'une quelconque utilité pour moi (il ne fait que causer des problèmes), donc je ne l'utilise pas, donc je ne me soucie pas personnellement de ce cas d'utilisation.
0 votes
DataContext="{Binding Source={x:Type BuildAssistantUI.ViewModels.MainViewModel}}"
pouvons-nous utiliser comme ceci {x:Type} ? mais, cela ne fonctionne pas.