2009-03-10 27 views
0

Ich versuche, eine ComboBox an Daten von einem Objekt zu binden. Das Objekt enthält eine Liste mit den zulässigen Status und eine Zeichenfolge, die den aktuellen Wert darstellt. Das Problem, das ich habe, ist, dass, wenn das Formular lädt es korrekt setzt den Wert der Combobox auf den aktuellen Wert, aber ich bin nicht in der Lage, den Wert auf etwas anderes zu ändern. Wenn ich auf das Dropdown-Menü klicke und einen neuen Wert wähle, wird das Dropdown-Menü geschlossen, aber der ursprüngliche Wert bleibt erhalten.WPF ComboBox Bindung unveränderbar

Die Comboboxen befinden sich jeweils in einer Reihe in einem DataGrid und die ComboBox ist in der RowDetailsTemplate für das DataGrid enthalten.

XAML:

<ComboBox 
    x:Name="cmbStatus" 
    ItemsSource="{Binding Path=AllowedStateValues}" 
    SelectedItem="{Binding Path=State}"  
    Height="20" 
    Width="100" /> 

Antwort

0

Staat decleration:

private string _state; 
    public string State { 
     get { return _state; } 
     set 
     { 
      if (AllowedStateValues != null && AllowedStateValues.Contains(value)) 
      { 
       _state = value; 

      } 
     } 

    } 

Ich hob nicht ein Ereignis haben wird, wenn es geändert wird, aber es scheint auch nicht die Setter zu rufen, wenn Sie die Combobox ändern

1

Versuchen Sie, die Bindung einzustellen Modus zu TwoWay. Wenn das nicht funktioniert, verwenden Sie PresentationTraceSources.TraceLevel Eigenschaft zu High, um alle Details zu erhalten.

+0

Ich habe versucht Mode = TwoWay und bekomme keine Änderung. Ich bin mir nicht sicher, was PresentationTraceSources.TraceLevel = "High" erreichen soll. – Stephan

+0

Es werden nur alle wichtigen Informationen zum Bindungssatz verfolgt. Möglicherweise gibt es einen Hinweis auf die Ursache des Problems. – orcun

0

Ich hatte gerade das gleiche Problem. Es stellte sich heraus, dass mein Problem in der Equals-Überschreibung der zu bindenden Objekte lag. Überprüfen Sie und stellen Sie sicher, dass mehr als ein Objekt, die nicht gleich sind, nicht als gleich verglichen werden.