WPF ObservableCollection: كيفية إضافة خط فارغ في comboBox لأحد النموذج ، ولكن لا يؤثر فعليًا على ObservableCollection؟
-
28-09-2019 - |
سؤال
لدي مراقبة ثابتة في فئة مستودع البيانات. أستخدمه لملء combobox على أحد أشكالاتي (التي يجب أن تكون قادرة على تضمين خط فارغ يمثل فارغًا).
أستخدم نفس ObservableCollection لإلغاء بيانات البيانات ، لذلك لا أريد العنصر الفارغ في ObservableCollection الفعلي. كيف أفعل هذا بالفعل؟
أوه ، والسبب في رغبتي في القيام بذلك هو أنه إذا كان لدي كلا النموذجين مفتوحًا وأحذف عنصرًا من ObservableCollection ، فيجب أن يعكس ذلك في كلتا القائمتين.
المحلول
- لا يمكنك تحديد قيمة فارغة في Combobox.
- يجب عليك استخدام عنصر فارغ لعرضه في عنصر التحكم.
لدي نفس المشكلة وأنا أستخدم هذا الحل في مشروعي الحالي:
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="-------"}/>
لا تنتمي إلى StackOverflow