Bouton à l'intérieur d'un WPF affichage de la Liste/grille de données
Je suis en train d'essayer d'obtenir la valeur/l'ID de l'cliqué ligne. Si la ligne est sélectionnée, cela fonctionne bien. Mais si j'essaie juste de cliquez sur le bouton à l'intérieur, le client sélectionné est null. Comment dois-je faire les Paramètres de Commande ici.
J'ai essayé de voir les réponses aux questions suivantes:
ListView et des Boutons à l'intérieur de ListView
Voici le code:
<Grid>
<ListView ItemsSource="{Binding Path=Customers}"
SelectedItem="{Binding Path=SelectedCustomer}"
Width="Auto">
<ListView.View>
<GridView>
<GridViewColumn Header="First Name">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Margin="6,2,6,2">
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Address">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Margin="6,2,6,2">
<Button Content="Address" Command="{Binding Path=DataContext.RunCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
public class VM : ViewModelBase
{
public RelayCommand RunCommand { get; private set; }
private ObservableCollection<Customer> _Customers;
public ObservableCollection<Customer> Customers
{
get { return _Customers; }
set
{
if (value != _Customers)
{
_Customers = value;
RaisePropertyChanged("Customers");
}
}
}
private Customer _SelectedCustomer;
public Customer SelectedCustomer
{
get { return _SelectedCustomer; }
set
{
if (value != _SelectedCustomer)
{
_SelectedCustomer = value;
RaisePropertyChanged("SelectedCustomer");
}
}
}
public VM()
{
Customers = Customer.GetCustomers();
RunCommand = new RelayCommand(OnRun);
}
private void OnRun()
{
Customer s = SelectedCustomer;
}
}
dans le OnRun Méthode, le Client sélectionné est de venir en null. Je veux de la ligne de données(client) ici. Comment puis-je faire cela?
Donc, si la ligne est sélectionnée et que vous cliquez sur le bouton ça marche? Avez-vous essayé de sélectionner automatiquement la ligne sur laquelle le bouton est cliqué?
Qu'entendez-vous par là? Comment voulez-vous sélectionner automatiquement la ligne? L'utilisateur sélectionne. Je suis confus
Qu'entendez-vous par là? Comment voulez-vous sélectionner automatiquement la ligne? L'utilisateur sélectionne. Je suis confus
OriginalL'auteur katie77 | 2011-10-24
Vous devez vous connecter pour publier un commentaire.
Trois solutions possibles que vous pouvez choisir.
<Button Content="Address" Command="{Binding Path=DataContext.RunCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}" CommandParameter={Binding} />
Je pense que CommandParameter={Binding} fonctionne bien parce que le DataContext de chaque ligne de chaque Client de l'objet.
et OnRun méthode doit être modifié afin d'obtenir un paramètre comme un argument.
Ou, Écrire un peu de code-behind avec SelectionChanged la gestion des événements. (non recommandé)
Ou, Utiliser EventToCommand dans MVVM-light toolkit. (non recommandé)
OriginalL'auteur Youngjae
CommandParameter ne prend PAS entièrement en charge les données de la liaison.
http://connect.microsoft.com/VisualStudio/feedback/details/472932/wpf-commandparameter-binding-should-be-evaluated-before-command-binding
OriginalL'auteur Raghavendra Naik