WPF ObservableCollection: Come aggiungere una riga vuota nella casella combinata propria forma, ma in realtà non influenzare l'ObservableCollection?

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

Domanda

Ho un ObservableCollection statica in una classe Data Repository. Io lo uso per popolare una combobox su una delle mie forme (che deve essere in grado di includere una riga vuota che rappresenta NULL).

Io uso la stessa ObservableCollection per popolare un DataGrid, quindi non voglio che l'elemento vuoto nel ObservableCollection reale. Come posso effettivamente fare questo?

Oh, e il motivo che voglio fare questo è così che se ho entrambe le forme aperte e io eliminare un elemento dalla ObservableCollection dovrebbe riflettere sul fatto che in entrambe le liste.

È stato utile?

Soluzione

  1. Non è possibile selezionare valore nullo in combobox.
  2. Devi usare elemento vuoto per visualizzarla nel controllo.
  3. Ho lo stesso problema e sto usando questa soluzione nel mio progetto in corso:

    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);
    }
    }
    

nuova collezione è a senso unico legame collezione di base:

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

Filtering:

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

Altri suggerimenti

Si potrebbe essere in grado di utilizzare la proprietà TargetNullValue di una dichiarazione vincolante per l'uscita di dichiarazione per un valore nullo.

<ComboBox ItemsSource={Binding Path=Collection, TargetNullValue="-------"}/>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top