2010-10-23 15 views
2

J'ai une question à propos de Control.DataBindings.C#: Comment lier Button.Enabled à si n'importe quel élément est sélectionné d'un ListView

Comment lier Button.Enabled à si un élément est sélectionné dans ListView? i.e .:

Button.Enabled = ListView.SelectedItems.Count > 0; 

Je sais que je peux utiliser l'événement ListView.SelectionChanged pour ce faire. Je me demande simplement comment utiliser DataBinding pour faire le même travail.

Merci.

Peter

P.S .: La raison pour laquelle je veux faire est: si Button.Enabled est en fonction des conditions de beaucoup d'autres contrôles, je pense que DataBinding est plus simple.

+1

Que voulez-vous lier à? J'utiliserais l'événement SelectionChanged comme vous l'avez suggéré. – PaulG

+0

Si seulement c'était WPF/Silverlight, ce serait tellement facile ... – slugster

Répondre

1

Si vous souhaitez utiliser des liaisons, vous devez créer un ValueConverter. Ceci est fait en implémentant l'interface System.Windows.Data.IValueConverter (la page MSDN a un exemple d'implémentation). Dans ce que vous reviendriez vrai si le int transmis est supérieur à 0.

Dans votre cas, vous lier à Button.EnabledListView.SelectedItems.Count et spécifiez votre convertisseur de valeur. Comme le dit @PaulG dans les commentaires, il est peut-être plus facile de simplement utiliser l'événement SelectionChanged, mais il est possible de faire via les liaisons.

0

J'essaie généralement de déclencher d'abord puis de convertir les valeurs.
Vous n'avez pas vraiment à mettre en œuvre un convertisseur de valeur dans ce cas, un simple DataTriggger fera:

<Button> 
    <Button.Style> 
    <Style TargetType="{x:Type Button}"> 
     <Style.Setters> 
     <Setter Property="Content" Value="Enabled When Selection Changed"/>   
     </Style.Setters> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding ElementName=_listBox, Path=SelectedItems.Count}" 
        Value="0"> 
      <Setter Property="IsEnabled" Value="False"/> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </Button.Style> 
</Button> 
<ListBox x:Name="_listBox"> 
    <ListBox.Items> 
    <ListBoxItem Content="1"/> 
    <ListBoxItem Content="2"/> 
    </ListBox.Items> 
</ListBox>