2016-07-26 6 views
0

ich folgenden Code haben:Taste aktivieren, wenn Einzelteile in beiden Listboxen ausgewählt sind

<ListBox x:Name="listbox1" HorizontalAlignment="Left" Height="240" Margin="81,80,0,0" VerticalAlignment="Top" Width="321" BorderBrush="#FF6C6C6C" SelectionMode="Single"/> 
<ListBox x:Name="listbox2" HorizontalAlignment="Left" Height="240" Margin="482,80,0,0" VerticalAlignment="Top" Width="318" BorderBrush="#FF6C6C6C" SelectionMode="Multiple"/> 

<Button x:Name="uButton" Content="Upload stuff" HorizontalAlignment="Left" Margin="840,178,0,0" VerticalAlignment="Top" Width="160" Height="46" BorderBrush="#FF6C6C6C" Foreground="#FF0068FF" Click="ButtonClick"> 
    ... 
</Button> 

möchte ich die Taste uButton von deaktiviert zu sein mit IsEnable = false, bis der Benutzer ein Element aus listbox1 ausgewählt und ein oder mehr Artikel von listbox2.

Wie kann ich das erreichen?

+1

Verwenden Sie einfach 'MultiBinding'. Binden Sie an beide 'SelectedItem'-Eigenschaften der ListView und schreiben Sie eine einfache Konvertierer-Klasse, die von' IMultiValueConverter' abgeleitet ist und überprüft, ob alle Elemente im Array-Parameter 'parameter' nicht null sind. Geben Sie entweder false oder true zurück. – SharpShade

Antwort

1

Fügen Sie SelectionChanged="ListBox_SelectionChanged" in Ihre ListBox1- und Listbox2-Eigenschaften in Ihrem XAML-Code hinzu.

hinzufügen IsEnabled="False" in den Tasten Eigenschaften

dann in Ihrem Code

private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (listbox1.SelectedItem != null && listbox2.SelectedItems != null) 
      ubutton.IsEnabled = true; 
     else 
      ubutton.IsEnabled = false; 
    } 
+0

Kann mit Bindings gemacht werden, daher ist dies nicht der schönste Weg. Würde trotzdem funktionieren, tho '. – SharpShade

+0

Hey, danke für deine Antwort. Alles scheint zu funktionieren, aber nur wenn ich 'listbox2.SelectedItems! = null' in' listbox2.SelectedItems.Count> 0' geändert habe –

+0

Ich bin froh, dass ich helfen konnte ... yeah Entschuldigung hat es nicht getestet XD – Neil

2

Providing Sie das MVVM Muster verwenden (was Sie mit WPF sollen), sollten Sie eine ICommand implementieren und an den Befehl binden Eigenschaft Ihrer Schaltfläche In der CanExecute-Methode Ihrer Schaltfläche können Sie die Anzahl der ausgewählten Elemente Ihrer ListBoxen überprüfen. Es aktiviert/deaktiviert automatisch Ihre Schaltfläche, wenn die Kriterien erfüllt sind. Dies könnte etwa so aussehen:

public class SomeCommand: ICommand 
{ 
    #region Fields 
    MainWindow mainWindow; 
    #endregion 

    #region Constructors and Destructors 
    public SomeCommand(MainWindow mw) 
    { 
     this.mainWindow = mw; 
    } 
    #endregion 

    #region ICommand 
    public event EventHandler CanExecuteChanged 
    { 
     add { CommandManager.RequerySuggested += value; } 
     remove { CommandManager.RequerySuggested -= value; } 
    } 

    public bool CanExecute(object parameter) 
    { 
     return (this.mainWindow.listbox1.SelectedItems.Count != 0 
       && this.mainWindow.listbox2.SelectedItems.Count != 0); 
    } 

    public void Execute(object parameter) 
    { 
     //DO STUFF; 
    } 
    #endregion 
} 

Und in XAML:

<ListBox x:Name="listbox1" HorizontalAlignment="Left" Height="240" Margin="81,80,0,0" VerticalAlignment="Top" Width="321" BorderBrush="#FF6C6C6C" SelectionMode="Single"/> 
    <ListBox x:Name="listbox2" HorizontalAlignment="Left" Height="240" Margin="482,80,0,0" VerticalAlignment="Top" Width="318" BorderBrush="#FF6C6C6C" SelectionMode="Multiple"/> 
    <Button x:Name="uButton" Command="{Binding SomeCommand}" Content="Upload stuff" HorizontalAlignment="Left" Margin="840,178,0,0" VerticalAlignment="Top" Width="160" Height="46" BorderBrush="#FF6C6C6C" Foreground="#FF0068FF" /> 
Verwandte Themen