problème avec wpf commande de ne pas exécuter lorsque le bouton cliqué
J'ai le code xaml suivant dans une application wpf. Je voudrais lier le bouton à une ICommand dans un modèle de vue. Pour une raison quelconque, je ne suis pas capable de voir la commande de mon point de vue.
c'est dans un contrôle utilisateur.
<Grid>
<Grid.DataContext>
<Binding
x:Name="SettingsData"
Path="Data" />
</Grid.DataContext>
.
.
.
<DockPanel Grid.Column="1">
<Button x:Name="SaveButton"
DockPanel.Dock="Top"
Height="25"
HorizontalAlignment="Left"
Margin="70 0 0 0"
Command="{Binding Path=SaveData}"
>Save Changes</Button>
</DockPanel>
</Grid>
Voici mon ICommand objet
public ICommand SaveData
{
get
{
if (_saveData == null)
{
_saveData = new RelayCommand(
param => this.saveData(),
param => true
);
}
return _saveData ;
}
}
Quelqu'un a une idée de pourquoi je ne peut pas se lier à cette commande?
Merci pour toute ses pensées....
- Qu'est-ce que votre mise en œuvre de RelayCommand, comme il n'appartient pas à la norme WPF bibliothèque? Je suppose que CanExecute retourne la valeur false.
- Je suis l'aide de la relaycommand mise en œuvre de Josh Smith MVVM tutoriel - msdn.microsoft.com/en-us/magazine/dd419663.aspx. le deuxième paramètre est le CanExecute, donc je suis toujours à l'envoi en vrai....
- Pouvez-vous voir toute erreur de liaison dans le VS de la fenêtre de Sortie pendant le débogage?
- Je vois cela dans la fenêtre de sortie - BindingExpression chemin erreur: "SaveData" la propriété ne trouve pas sur l '"objet" "Liste`1'
- Avez-vous réglé la Liaison avec
PresentationTraceSources.TraceLevel=High
pour voir si tout est encore en train de travailler?
Vous devez vous connecter pour publier un commentaire.
Dirait que vous êtes paramètre le DataContext de la Grille de la propriété Data de votre ViewModel (ou l'objet). Si l'objet que les Données de propriété expose ne fournit pas les SaveData de commande, vous aurez le problème que vous décrivez. Rappelez-vous le DataContext est hérité de la mère.
Si vous avez besoin que le DataContext est défini de cette manière, et nécessitent encore le bouton pour référence le parent DataContext, une option serait d'utiliser un RelativeSource pour pointer vers un élément qui a le Dernier comme le DataContext.
Dans WPF vous avez également la possibilité de prendre les commandes de la statique et de l'aide de l' {x:Statique} extension de balisage pour l'atteindre.
Espère que ça aide.
EDIT: Voici un exemple, si votre
<Grid>
est contenue dans un<UserControl>
.Aussi, je ne sais pas ce que votre plein Xaml ressemble, mais je pense que cela peut être beaucoup simplifié par la suppression du DataContext sur la Grille et de la Liaison de Données sur le ItemsControl (ou ce que vous utilisez pour afficher la liste des objets).
Regardant d'erreur ci-dessous, on dirait que votre DataContext sur DockPanel est lié à une sorte de Liste:
Veuillez remplacer l'attribut Source dans la Liaison si le DataContext n'est pas au top niveau