C# 使用System.Linq.IGrouping时为x:DataType分配什么
好吧,这应该很简单,但我被卡住了 我正在升级一个旧的.Net Xamarin项目,我想做的一件事是向XAML文件添加x:DataType标记,以便它能够验证和自动完成所有绑定。例如C# 使用System.Linq.IGrouping时为x:DataType分配什么,c#,xaml,xamarin,.net-standard-2.1,C#,Xaml,Xamarin,.net Standard 2.1,好吧,这应该很简单,但我被卡住了 我正在升级一个旧的.Net Xamarin项目,我想做的一件事是向XAML文件添加x:DataType标记,以便它能够验证和自动完成所有绑定。例如 <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:vm="clr-namespace:MyProject.PageModels.Info"
xmlns:models="clr-namespace:MyProject.Models"
x:DataType="vm:InfoViewModel"
x:Class="MyProject.Pages.Info.InfoPage"
Title="PageTitle">
到目前为止还不错,但此特定页面显示了一组记录列表,定义如下:
public List<IGrouping<string, LocalDocument>> GroupedDocs { get; set; }
public List GroupedDocs{get;set;}
现在编译器会抱怨,因为我没有为ListView.GroupHeaderTemplate设置有效的数据类型(因为模板中的绑定在ViewModel中不存在)。。。我不知道该给它分配什么,因为x:DataType似乎不支持接口(甚至不提接口+泛型)
我应该指定什么来代替????在前面的代码示例中?
作为一种变通方法,我创建了一个虚拟类,它实现了您可以尝试创建自己的分组
public class Grouping<K, T> : ObservableCollection<T>
{
public K Key { get; private set; }
public Grouping(K key, IEnumerable<T> items)
{
Key = key;
foreach (var item in items)
this.Items.Add(item);
}
}
公共类分组:ObservableCollection
{
公钥{get;private set;}
公共分组(K键,IEnumerable项)
{
钥匙=钥匙;
foreach(项目中的var项目)
此.Items.Add(item);
}
}
用法:
public ObservableCollection<Grouping<string, LocalDocument>> GroupedDocs { get; set; }
public-observeCollection-GroupedDocs{get;set;}
从下面的链接下载源文件 我可以转换它,如果你是这个意思的话,但是它是Linq调用的结果,返回一个IGrouping。我喜欢这个解决方案!它仍然需要一个额外的C#类,这只是因为,但是指定的x:DataType和属性将是一致的(并且该类将来可能会方便地添加额外的属性)。
public ObservableCollection<Grouping<string, LocalDocument>> GroupedDocs { get; set; }