在.xaml文件中,我尝试绑定到列出的自定义类作为ObeservableCollection对象。我可以成功更新变量并更新ObservableCollection。我可以检查它,将其呈现为:
<ListView ItemSource="{Binding myCustomObservableCollection}"/>
字符串
然而,即使我可以确定列表中的条目数,我也无法访问我的自定义类的属性。我尝试了这个方法,但没有成功,因为列表的行是空的。即使使用Text="{Binding Id}"
也不起作用,因为它告诉我“Id”不是myCustomViewModel中的属性:
<ListView
x:DataType="vm:CustomtViewModel"
BackgroundColor="LightSlateGray"
HasUnevenRows="True"
HorizontalOptions="FillAndExpand"
ItemsSource="{Binding myCustomObservableCollection}"
SeparatorColor="Black">
<ListView.ItemTemplate>
<DataTemplate>
<label Text="{Binding Source={StaticSource myCustomClass}", Path=Id}/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
当然,我已经将我的自定义类插入到.xaml中:
<ContentPage.Resources>
<local:myCustomClass x:Key="myCustomClass" />
</ContentPage.Resources>
Id是我的Models中的公共类所需的属性之一
namespace myApp.Models {
public class myCustomClass : INotifyPropertyChanged
{
private string _id;
public event PropertyChangedEventHandler PropertyChanged;
public string Id
{
get => _id;
set {
_id = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Id)));
}
}
}
}
所以我想知道如何有效地读取列表中的每一个条目作为一个对象,以便解析其中的属性。
非常感谢
2条答案
按热度按时间2ul0zpep1#
你看过关于ListView中绑定单元格的官方文档了吗?myCustomClass不必从INotifyPropertyChanged接口继承。
只需确保视图模型中存在
public ObservableCollection<myCustomClass> { get; set; }
即可,例如:另外,我看到你的列表视图使用了
x:DataType="vm:CustomtViewModel"
,官方文件说:将VisualElement的x:DataType属性设置为VisualElement及其子元素将绑定到的对象的类型。
所以你可以像Jason说的那样绑定ID:
另外,你可以参考github上关于listview mvvm绑定的官方示例,这是viewmodel's code和page's code。
jaql4c8m2#
也要感谢张丽云和ToolmakerSteve,我想出了一个解决方案。设置正确的x:DataType确实很重要,我发现它甚至可以多次指向不同的类,链接不同类型的数据。
现在,从list中提取的对象被正确地读取,引用了它自己的类。
技巧是在xaml中添加了一个引用之后,将
x:DataType="local:myCustomClass"
添加到DataTemplate标记中,如下所示:(我也在这里插入这一点,以便在其他人遇到同样的问题时阅读)
它就像一个魅力!
希望这能让其他人免于头痛!干杯。