WPF ObservableCollection: Wie eine leere Zeile in einer Form der Combobox hinzufügen, aber nicht wirklich die ObservableCollection beeinflussen?

StackOverflow https://stackoverflow.com/questions/3876557

Frage

Ich habe eine statische ObservableCollection in einer Klasse Data Repository. Ich benutze es, um eine Combobox auf einem meiner Formen zu füllen (die eine Leerzeile in der Lage sein muss, umfassen, die NULL darstellt).

Ich verwende das gleiche ObservableCollection ein Datagrid zu füllen, so dass ich nicht das leere Element in der aktuellen ObservableCollection will. Wie kann ich das wirklich tun?

Oh, und der Grund, warum ich dies tun möchte, ist so, dass, wenn ich beide Formen öffnen und ich ein Element aus der ObservableCollection löschen es, dass in den beiden Listen widerspiegeln.

War es hilfreich?

Lösung

  1. Sie können nicht null-Wert in Combobox wählen.
  2. Sie haben leeres Element zu verwenden, um es in der Steuerung angezeigt werden soll.
  3. Ich habe das gleiche Problem, und ich bin mit dieser Lösung in meinem aktuellen Projekt:

    public class ObservableCollectionCopy<T> : ObservableCollection<T>
    {
    public ObservableCollectionCopy(T firstItem, ObservableCollection<T> baseItems)
    {
        this.FirstItem = firstItem;
        this.Add(firstItem);
        foreach (var item in baseItems)
            this.Add(item);
        baseItems.CollectionChanged += BaseCollectionChanged;
    }
    
    
    public T FirstItem { get; set; }
    
    
    private void BaseCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
        if (e.NewItems != null)
            foreach (var newItem in e.NewItems.Cast<T>().Reverse())
                this.Insert(e.NewStartingIndex + 1, newItem);
        if (e.OldItems != null)
            foreach (var oldItem in e.OldItems.Cast<T>())
                this.Remove(oldItem);
    }
    }
    

Neue Kollektion hat einen Weg zur Basis Sammlung Bindung:

this.SelectableGroups = new ObservableCollectionCopy<GroupModel>(
                new GroupModel{Id = -1, Title = "Any group"},
                this.GroupsCollection);

Filter:

if (this.selectedGroup != null && this.selectedGroup.Id != -1)
    this.MyCollectionView.Filter = v => v.SomeItem.GroupId == this.selectedGroup.Id;
else this.MyCollectionView.Filter = null;

Andere Tipps

Sie könnten in der Lage, die TargetNullValue Eigenschaft einer verbindlichen Erklärung declare Ausgang für einen Null-Wert zu verwenden.

<ComboBox ItemsSource={Binding Path=Collection, TargetNullValue="-------"}/>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top