BindingExpression对于CollectionViewSource中的ListCollectionView无效

时间:2018-11-13 11:03:18

标签: c# wpf mvvm data-binding collections

我需要在ListView中显示一个集合。为此,我有一个带有一个ListViewItem的CompositeCollection作为该集合的搜索栏。我将其与“ n”项列表放在一起。这样做的原因是,我需要搜索栏不受排序的影响。问题是,我绑定到CollectionViewSource的CollectionView会产生BindingError,我不知道为什么。

我的集合的XAML代码:

<Grid.Resources>
      <CollectionViewSource x:Key="ElementSource" Source="{Binding ElementsCollectionView}"/>
      <CompositeCollection x:Key="CompositeCollection">
           <ListViewItem Content="{Binding HeaderRow}"/>
           <CollectionContainer Collection="{Binding Source={StaticResource ElementSource}}"/>
      </CompositeCollection>
</Grid.Resources>

还有我使用的收藏集

private NotifyCollection<DataEntry> _data;
public NotifyCollection<DataEntry> Data
{
    get { return this._data; }
    set { this.SetProperty(ref this._data, value); }
}

private CollectionView _elementsCollectionView;
public CollectionView ElementsCollectionView
{
    get { return this._elementsCollectionView; }
    set
    {
        if (value == null) return;
        this._elementsCollectionView = value;
    }
}

private CompositeCollection _tableItems;
public CompositeCollection TableItems
{
    get { return this._tableItems; }
    set { this.SetProperty(ref this._tableItems, value); }
}

private DataEntry _headerRow;
public DataEntry HeaderRow
{
    get { return this._headerRow; }
    set { this.SetProperty(ref this._headerRow, value); }
}

正在启动收藏集:

public void SetCollection()
{
    this.TableItems.Add(this.HeaderRow);
    this.TableItems.Add(this.ElementsCollectionView);
}

this.TableViewModel.ElementsCollectionView =  
     (CollectionView)CollectionViewSource.GetDefaultView(this.Data);

如您所见,一切似乎都还不错。 NotifyCollection继承自ObservableCollection,应进行工作。如果我将HeaderRow添加到“ ElementsCollectionView”,则所有工作正常,但HeaderRow已排序。如果我将CollectionView添加到CollectionViewSource,则会得到BindingError:

 System.Windows.Data Error: 5 : Value produced by BindingExpression is      
 not valid for target property.; 
 Value='System.Windows.Data.ListCollectionView' 
 BindingExpression:Path=ElementsCollectionView; 
 DataItem='AuftragsverwaltungDataTableViewModel' (HashCode=57170378); 
 target element is 'CollectionViewSource' (HashCode=52642430); target property is 'Source' (type 'Object')

1 个答案:

答案 0 :(得分:0)

您不能将Source的{​​{1}}属性设置为CollectionViewSource。这将抛出ListCollectionView。对ArgumentException集合进行排序,然后绑定到该集合。