使用ICollectionView的谓词

时间:2013-09-10 11:26:43

标签: c# silverlight mvvm uicollectionview collectionview

我有以下内容:

public enum ValidationSeverity 
{
    Error   = 1,
    Warning = 2
}

Public class Errors
{
   public ValidationSeverity Severity { set; get; }
   public string Desc { set; get; }
}

在ViewModel中定义了ObservableCollection,并将其绑定到sdk的DataGrid,现在我有两个切换按钮:

  • 显示错误
  • 显示警告
  •   -

当我点击“显示错误”时,数据网格将只有其严重性为“错误”的行。 我正在尝试使用ICollectionView,当我点击“显示错误”时,它会转到:

    private void OnShowErrors()
    {
        if (IsErrorButtonChecked)
            Show(ValidationSeverity.Error);
        else
            Hide(ValidationSeverity.Error);
    }

    private void Hide(ValidationSeverity sev)
    {
        var lcv = _collectionViewSourceHelper.GetCollectionView(ErrorsList);
        if (lcv == null || !lcv.CanFilter) return;
        lcv.Filter = item =>
        {
            var error = item as Error;
            if (error == null) return false;

            return error.Severity != sev;
        };
    }

    private void Show(ValidationSeverity sev)
    {
        var lcv = _collectionViewSourceHelper.GetCollectionView(ErrorsList);
        if (lcv == null || !lcv.CanFilter) return;

        lcv.Filter = item =>
        {
            var error = item as Error;
            if (error == null) return false;

            return error.Severity == sev;
        };
    }

_collectionViewSourceHelper - 我添加了这个,因为在Silverlight中我们不能直接使用GetCollectionView,现在我的问题是如何做到这一点,我写了两个谓词,但我怎么能继续,如果我编辑collectionView就可以了导致改变观点?

由于

1 个答案:

答案 0 :(得分:0)

视图只是集合的包装,如果你编辑集合,变化也会反映在集合视图中,所以基本上你必须编辑ErrorList。