无法从 .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);
}
我有一个 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 theObservableCollection
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);
}