2016-06-03 3 views
0

Ich habe zwei Combobox binden an die gleiche ObservableCollection proprety, ich würde gerne wissen, ob es möglich ist, ein Element in der Combox zu deaktivieren, wenn es bereits in einem von ihnen ausgewählt ist? in wpf. thxWie kann ich ein Combox-Objekt deaktivieren, wenn es bereits in einer anderen Combobox in xaml C# ausgewählt wurde?

+0

Nun, was hast du probiert? Wir müssen etwas Code sehen, um Ihnen helfen zu können. –

+0

Bitte geben Sie uns einen Code der aktuellen Situation und erklären Sie aus dem Code, welche Teile nicht wie erwartet funktionieren. –

+0

Mögliches Duplikat von [Disallow/Block Auswahl des deaktivierten Combobox-Elements in WPF] (http://stackoverflow.com/questions/20889963/disallow-block-selection-of-disabled-combobox-item-in-wpf) –

Antwort

0

Sie können die IsSelected-Eigenschaft des ComboBox-Elements an einen Bool-Wert binden, der einen ausgewählten Status in Ihrer Klasse angibt.

<ComboBox ItemsSource="{Binding Items}"> 
     <ComboBox.ItemContainerStyle> 
      <Style TargetType="ComboBoxItem"> 
       <Setter Property="IsSelected" Value="{Binding SelectedA, Mode=OneWayToSource}"></Setter> 
       <Setter Property="IsEnabled" Value="{Binding SelectedB}"></Setter> 
      </Style> 
     </ComboBox.ItemContainerStyle> 
    </ComboBox> 
    <ComboBox ItemsSource="{Binding Items}"> 
     <ComboBox.ItemContainerStyle> 
      <Style TargetType="ComboBoxItem"> 
       <Setter Property="IsSelected" Value="{Binding SelectedB, Mode=OneWayToSource}"></Setter> 
       <Setter Property="IsEnabled" Value="{Binding SelectedA}"></Setter> 
      </Style> 
     </ComboBox.ItemContainerStyle> 
    </ComboBox> 

Erstellen Sie eine Klasse, die

 public class MyClass : INotifyPropertyChanged 
    { 
     private bool selectedA; 

     public bool SelectedA 
     { 
      get { return !selectedA; } 
      set { selectedA = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("SelectedA")); } 
     } 

     private bool selectedB; 

     public bool SelectedB 
     { 
      get { return !selectedB; } 
      set { selectedB = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("SelectedB")); } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 
    } 

ein paar bools

aussetzt (Im Beispiel bin ich einfach jede ausgewählte bool in dem Getter Umkehr, aber in Wirklichkeit die Bool Spiegeln wahrscheinlich am besten durchgeführt werden würde mit ein Konverter)

0

Sie können entweder:

  1. Stellen Sie die IsEnabled Eigenschaft des ComboBoxItem so etwas wie dies mit: Disallow/Block selection of disabled combobox item in wpf (Danke Kamil für den Link)
  2. es anders aussehen (aber immer noch wählbar);
  3. Aktualisieren Sie die zweite Liste, so dass es die ausgewählte Option entfernt, wenn die Auswahl der ersten Änderungen; oder
  4. Nachträgliche Validierung anwenden (z. B. ein Fehlersymbol/eine Fehlermeldung anzeigen oder die Schaltfläche "Senden" deaktivieren, wenn die beiden Optionen identisch sind).

Ihre Wahl hängt nur von der Erfahrung ab, die Sie erreichen möchten.

+0

Was ist mit IsEnabled-Eigenschaft eines ComboboxItem? –

+0

Hatte das vergessen. Danke Kamil! In jedem Fall ist es wichtig, die gewünschte Erfahrung zu beschreiben, um eine gute Lösung zu finden. – robertos

+0

Ich stimme absolut zu :) –

Verwandte Themen