无法从 .NET Core 上的 Studio Code 找到 ICollectionView

ICollectionView could not be found from Studio Code on .NET Core

我有一个 XAML 和一个 MVVM,显示一个 DataGrid 和一个 ObservableCollection。 所有工作正常(更多细节在我之前,我自己已经回答,)。

现在我正在尝试添加一个过滤器,我想关注@mark-heath tutorial

我的项目构建抛出以下内容

error CS0246: The type or namespace name 'ICollectionView' could not be found (are you missing a using directive or an assembly reference?) 

尽管我确实包含了 documented namespace

using System.ComponentModel;

关于哪个工作室代码显示 Unnecessary using directive。 我的 .csproj 在 .NET Core 3.0

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>

问题似乎与我如何添加程序集引用有关。

dotnet add package WindowsBase

它使用 .NET Framework 恢复包,但也许这是错误的,因为我在 .NET Core 和 Linux.

哪个是正确的方法?除了 "you can't do that" 答案...也许还有 另一个 ,等效的包要添加... 来自 Avalonia UI?有人知道或使用它吗?

在 Avalonia 上搜索 UI github 并在 gitter 上询问

我看到有一个已经关闭了 github issue about that, so maybe is there a solution now? (I'm asking on Avalonia UI gitter channel)

首先 - 即使在 WPF 和 Windows 中 - 根据我的 comment 那里的教程是错误的:

you need to bind to the ICollectionView and not to the ObservableCollection to see the filtering effect.

所以,视图必须固定如下

<DataGrid Items="{Binding PeopleView}" 

现在,回到关于 Linux 和 Avalonia UI 的问题。

正如 Steven Kirk, I've looked at github DevTools source 在 avalonia 中所建议的那样,它在视图模型中进行过滤,这条线索就可以解决问题。

所以我在视图模型中声明PeopleView

public DataGridCollectionView PeopleView { get; }

作为包含在所需命名空间中的 DataGridCollectionView

using Avalonia.Collections;

我终于可以实现过滤器了

public MainWindowViewModel()
{
    People = new ObservableCollection<Person>(GenerateMockPeopleTable());
    PeopleView = new DataGridCollectionView(People);
    PeopleView.Filter = o => String.IsNullOrEmpty(Filter) ? true : ((Person)o).FirstName.Contains(Filter); 

}