WPF ObservableCollection: كيفية إضافة خط فارغ في comboBox لأحد النموذج ، ولكن لا يؤثر فعليًا على ObservableCollection؟

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

سؤال

لدي مراقبة ثابتة في فئة مستودع البيانات. أستخدمه لملء combobox على أحد أشكالاتي (التي يجب أن تكون قادرة على تضمين خط فارغ يمثل فارغًا).

أستخدم نفس ObservableCollection لإلغاء بيانات البيانات ، لذلك لا أريد العنصر الفارغ في ObservableCollection الفعلي. كيف أفعل هذا بالفعل؟

أوه ، والسبب في رغبتي في القيام بذلك هو أنه إذا كان لدي كلا النموذجين مفتوحًا وأحذف عنصرًا من ObservableCollection ، فيجب أن يعكس ذلك في كلتا القائمتين.

هل كانت مفيدة؟

المحلول

  1. لا يمكنك تحديد قيمة فارغة في Combobox.
  2. يجب عليك استخدام عنصر فارغ لعرضه في عنصر التحكم.
  3. لدي نفس المشكلة وأنا أستخدم هذا الحل في مشروعي الحالي:

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

مجموعة جديدة لها ملزمة في اتجاه واحد للمجموعة الأساسية:

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

الفلتره:

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

نصائح أخرى

قد تكون قادرًا على استخدام TargetNullValue خاصية إعلان ملزمة لإعلان الإخراج لقيمة فارغة.

<ComboBox ItemsSource={Binding Path=Collection, TargetNullValue="-------"}/>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top