En utilisant MVVM, comment passer SelectedItems d'un XamDataGrid comme paramètre à la Commande soulevées par le ContextMenu?
Je suis en train de passer le point sur XamDataGrid sur lequel je fais un clic droit de la souris pour ouvrir un ContextMenu, ce qui soulève une Commande dans mon ViewModel. En quelque sorte, la méthode que la Commande des appels n'est pas accessible en mode de débogage.
C'est le ciselée à partir de la vue
<ig:XamDataGrid DataSource="{Binding DrdResults}" Height="700" Width="600">
<ig:XamDataGrid.ContextMenu>
<ContextMenu DataContext="{Binding RelativeSource={RelativeSource Mode=Self},
Path=PlacementTarget.DataContext}"
AllowDrop="True" Name="cmAudit">
<MenuItem Header="View History"
Command="{Binding ViewTradeHistory}"
CommandParameter="{Binding Path=SelectedItems}">
</MenuItem>
</ContextMenu>
</ig:XamDataGrid.ContextMenu>
<ig:XamDataGrid.FieldSettings>
<ig:FieldSettings AllowFixing="NearOrFar"
AllowEdit="False"
Width="auto" Height="auto" />
</ig:XamDataGrid.FieldSettings>
</ig:XamDataGrid>
Mon code dans le ViewModel de ce point de Vue est comme suit.
public WPF.ICommand ViewTradeHistory
{
get
{
if (_viewTradeHistory == null)
{
_viewTradeHistory = new DelegateCommand(
(object SelectedItems) =>
{
this.OpenTradeHistory(SelectedItems);
});
}
return _viewTradeHistory;
}
}
Et enfin la méthode qui est appelée par la Commande ci-dessous est
private void OpenTradeHistory(object records)
{
DataPresenterBase.SelectedItemHolder auditRecords
= (DataPresenterBase.SelectedItemHolder)records;
//Do something with the auditRecords now.
}
Je ne suis pas sûr de ce que je fais tort ici. Toute aide sera très appréciée.
Grâce,
Shravan
InformationsquelleAutor user290669 | 2010-06-09
Vous devez vous connecter pour publier un commentaire.
J'ai eu ce travail par l'amélioration de Damian réponse (qui n'a pas assez de travail).
Voici ma solution:
D'abord le Comportement:
Et puis son utilisation:
Bien sûr, vous aurez besoin d'avoir un "SelectedDataItems" dans votre modèle de vue.
Edit: La
SelectedDataItems
propriété dans le modèle de vue doit être instantited d'abord comme un regroupement vide, sinon ça ne marchera pas.Pour un seul élément, infragistics a eu la gentillesse d'ajouter un bindable DependencyProperty appelé "ActiveDataItem", qui est "la" élément sélectionné, le cas échéant.
Il fonctionne même dans les deux sens, c'est à dire que vous pouvez réinitialiser la sélection à l'intérieur de votre ViewModel.
Malheureusement, autant que je sache, il n'y a pas de chose de similaire pour la multi-sélection.
Vous aurez à mettre en œuvre sur votre propre, à parcourir les enregistrements sélectionnés, vérifiez si elles sont datarecords, obtenir l'enregistrement et dataitem etc...
Essayer de liaison de votre grille de données est SelectedItem à une propriété dans votre viewmodel.
Vous pouvez ensuite accéder à cette propriété dans votre
OpenTradeHistory()
méthode.CommandParameter="{Binding Path=SelectedItems}">
? Si ceux qui ont l'origine des Éléments Sélectionnés dans la grille, alors pourquoi ne vous les envoyer comme paramètre, cliquez sur le bouton de droite de ne pas sélectionner un élément?Pour la liaison aux éléments sélectionnés, j'ai choisi de créer un problème à l'aide de Système.Interactivité:
Certains où, à votre avis, serait quelque chose comme ce qui suit (j'ai oublié les noms des mappages pour des raisons de concision):
Maintenant, votre problème avec la liaison de commande à un menu contextuel, c'est autre chose... je vais revoir cette