La liaison ViewModel pour ContentControl comme son DataContext
Je veux changer les contrôles utilisateur clique sur le bouton (je ne vais pas compliquer ici, donc je vais seulement mentionner parties importantes). Donc, l'idée était de lier les ViewModels de ces contrôles utilisateur ContentControl, et de les associer points de Vue à l'aide de DataTemplates.
Voici le code:
<Window x:Class="Project.MainWindow">
<Window.Resources>
<DataTemplate DataType="{x:Type UserControl:ViewUserControlViewModel}" >
<UserControl:ViewUserControl/>
</DataTemplate>
<DataTemplate DataType="{x:Type UserControl:EditUserControlViewModel}" >
<UserControl:EditUserControl/>
</DataTemplate>
</Window.Resources>
<Grid>
<ContentControl DataContext="{Binding UserControlViewModel}" />
<Button Content="View" Click="ChangeToView()"/>
<Button Content="Edit" Click="ChangeToEdit()"/>
</Grid>
</Window>
ViewModel:
public class MainWindowViewModel : DependencyObject
{
public DependencyObject UserControlViewModel
{
get { return (DependencyObject)GetValue(UserControlViewModelProperty); }
set { SetValue(UserControlViewModelProperty, value); }
}
public static readonly DependencyProperty UserControlViewModelProperty =
DependencyProperty.Register("UserControlViewModel", typeof(DependencyObject), typeof(MainWindowViewModel), new PropertyMetadata());
public MainWindowViewModel()
{
UserControlViewModel = new EditUserControlViewModel();
}
}
Mais theres un problème. Quand j'ai démarrer le projet, je ne vois que des boutons, mais pas n'importe UserControls. Qu'ai-je fait de mal?
Est-ce une faute de frappe? Vous vous Inscrivez userControlViewModel, mais se lient à UserControlViewModel.
Oui, c'est une faute de frappe. J'ai corrigé maintenant 🙂
Oui, c'est une faute de frappe. J'ai corrigé maintenant 🙂
OriginalL'auteur kr85 | 2012-07-19
Vous devez vous connecter pour publier un commentaire.
Si votre
Window.DataContext
est correctement configuré pourMainWindowViewModel
cela devrait faire le travailVous êtes un sauveteur.
Vous avez sauvé ma journée
OriginalL'auteur LPL
Lors mvvm votre viewmodel doit implémenter INotifyPropertyChanged et de ne pas hériter de DependencyObject.
xaml: vous devez définir la Propriété de Contenu pour votre CurrentWorkspace.
! N'oubliez pas de mettre le DataContext de votre fenêtre de votre MainWindowViewModel instance.
OriginalL'auteur blindmeis
Tout d'abord, vous devez poster le code de votre UserControl depuis (dans votre extrait de code ci-dessus), il est responsable de l'affichage de certaines données.
Deuxième vous n'êtes pas de liaison quoi que ce soit dans votre code.
Tiers de votre mise en œuvre de la ViewModel est mauvais. Vous n'avez pas besoin de la sous-classe des DependencyObject mais au lieu de mettre en œuvre l'interface INotifyPropertyChanged afin d'établir un ViewModel qui est capable de notifier votre point de Vue.
Quatrième, je ne sais pas ce que vous faites avec
peut-être que vous pouvez expliquer davantage ?
Cinquième lors de la mise en œuvre de la MVVM patterm (ce que ne pas le faire), vous devriez éviter d'utiliser des événements comme l'événement click et au lieu d'utiliser des Commandes.
(Je sais que c'est pas une vraie réponse, mais je n'ai pas voulu l'écrire dans les commentaires la syntaxe)
OriginalL'auteur marc wellman