WPF ObservableCollection: Comment ajouter une ligne vide dans la zone de liste déroulante de une forme, mais pas réellement affecter la ObservableCollection?

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

Question

J'ai un ObservableCollection statique dans une classe du référentiel de données. Je l'utilise pour remplir une zone de liste déroulante sur un de mes formes (ce qui doit être en mesure d'inclure une ligne vide qui représente NULL).

J'utilise le même ObservableCollection pour remplir une grille de données, donc je ne veux pas l'élément vide dans la ObservableCollection réelle. Comment puis-je réellement faire cela?

Oh, et la raison pour laquelle je veux faire cela est que si j'ai les deux formes ouvrir et supprimer un élément de la ObservableCollection devrait refléter le fait que dans les deux listes.

Était-ce utile?

La solution

  1. Vous ne pouvez pas sélectionner la valeur NULL dans combobox.
  2. Vous devez utiliser élément vide pour l'afficher dans le contrôle.
  3. J'ai le même problème et j'utilise cette solution dans mon projet en cours:

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

Nouvelle collection a une voie de liaison à la collecte de base:

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

Filtrage:

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

Autres conseils

Vous pourriez être en mesure d'utiliser la propriété TargetNullValue d'une déclaration contraignante sortie pour une valeur déclarer nulle.

<ComboBox ItemsSource={Binding Path=Collection, TargetNullValue="-------"}/>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top