4

データリポジトリクラスに静的なObservableCollectionがあります。これを使用して、フォームの1つにコンボボックスを設定します(NULLを表す空白行を含めることができる必要があります)。

同じObservableCollectionを使用してDataGridにデータを入力するので、実際のObservableCollectionに空白のアイテムは必要ありません。実際にこれを行うにはどうすればよいですか?

ああ、これを実行したい理由は、両方のフォームを開いていて、ObservableCollectionからアイテムを削除した場合に、両方のリストにそれが反映されるようにするためです。

4

2 に答える 2

5
  1. コンボボックスでnull値を選択することはできません。
  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;
于 2010-10-07T07:47:17.050 に答える
1

TargetNullValueバインディング宣言のプロパティを使用して、null値の出力を宣言できる場合があります。

<ComboBox ItemsSource={Binding Path=Collection, TargetNullValue="-------"}/>
于 2010-10-07T06:51:53.380 に答える