2010-11-26 13 views
1

Ich versuche, ein ComboBox-Steuerelement an eine Liste von Zeichenfolgen zu binden, die aus einer Liste benutzerdefinierter Objekte extrahiert werden. HierWie erhalte ich eine dynamische Liste von Eigenschaftswerten einer Liste?

ist das Objekt Ich verwende:

public class Operation 
{ 
    public DateTime ValueDate { get; set; } 
    public int Amount { get; set; } 
    public string Category { get; set; } 
} 

Was ich versuche das Kombinationsfeld zur Eingabe zu tun, ist die Bindung eine neue Operation der Kategorie in der Liste der verschiedenen Kategorien bereits in einer Liste der vorhandenen von Operationen.

Beispiel:

Liste der Operationen:

{04/12/2010, 100, "Home"} 
{05/12/2010, 100, "Home"} 
{05/12/2010, 200, "Entertainment"} 

Erhältlich in der Auto-komplette Liste der Combobox: "Home", "Entertainment".

Derzeit kann ich eine statische Liste der verfügbaren Kategorien in der Liste erhalten, aber ich kann die Liste nicht aktualisieren, wenn ich der vorhandenen Liste eine neue Operation hinzufüge.

+0

Sie das Problem gelöst haben? –

+0

Ja, ich beendete das Lösen und wiederbinden, wie Sie vorgeschlagen haben. –

+0

Das Arbeiten mit einer 'BindingSource' könnte auch eine andere interessante Funktion ergeben. Ich schlage vor, wenn Sie interessiert sind, dass Sie diese Klasse für zukünftige Referenz aus dem Auge nehmen, damit Sie dieses Objekt auch für Sie arbeiten lassen können. Froh, dass ich trotzdem helfen könnte! =) –

Antwort

1

Sie müssen Ihre Liste zur Aktualisierung auflösen und erneut binden.

+0

Genau das möchte ich vermeiden, gibt es wirklich keinen anderen Weg damit umzugehen? –

+0

Sie sollten dann eine 'BindingSource' verwenden, die Sie ihre 'DataSource'-Eigenschaft festlegen und dann diese' BindingSource' als Ihre' ComboBox.DataSource' zuweisen. Wenn Sie fertig sind, versuchen Sie, direkt mit dem 'CurrencyManager' zu arbeiten. Für die Aktualisierung müssen Sie dann mit einer der "Refresh" -Methode von den oben genannten Objekten arbeiten. –

0

Sie können dies tun:

_combo.ItemsSource = _operationsCollection; 
_combo.DisplayMemberPath = "Category"; 
_combo.Items.Filter = Filter; 

private bool Filter(object operationObj) 
{ 
    var operation = (Operation)operationObj; 
    var first = _operationsCollection.First(p => p.Category == operation.Category); 
    return ReferenceEquals(operation, first); 
} 
Verwandte Themen