我已将我的ViewCell
从list-xaml转移到另一个,现在我很难绑定属性。
我的ListView
项目来源是ObservableCollection
“成员”。
public class Member
{
public string Name { get; set; }
public string Image { get; set; }
public string Description { get; set; }
}
所以现在我想弄清楚如何在我的MemberViewCell中使用bindable属性。
我读过的例子非常简单,我为Name创建了一个BindableProperty以及Name的普通属性,当Name被修改时,它将触发图形更新。
我可以使用Member创建一个BindableProperty,这样我就不需要为我想要暴露的每个属性编写所有可更改的bindables /属性吗?
这样的事情:
public static readonly BindableProperty MemberSource = BindableProperty.Create("Member", typeof(Member), typeof(ListViewMemberCell), null, defaultBindingMode: BindingMode.OneWay, propertyChanged: MemberSourcePropertyChanged);
public Member Member
{
get { return GetValue(MemberSource) as Member; }
set
{
SetValue(MemberSource, value);
}
}
private static void MemberSourcePropertyChanged(BindableObject bindable, object oldValue, object newValue)
{
ListViewMemberCell cell = (ListViewMemberCell)bindable;
/// Set the different properties to my labels/images based on member.
}
当然我首先尝试了这个但是正如预期的那样我得到了一个编译错误(在这个组件的使用者中)。
<ListView.ItemTemplate>
<DataTemplate>
<memberCell:ListViewMemberCell Member="{Bindable}"/>
</DataTemplate>
</ListView.ItemTemplate>
因此,{Bindable}
感觉不对,错误也是如此,但我在DataTemplate中使用ViewCell时所做的就是像{Bindable Name} /// Member.Name
那样绑定...
我希望我只是误解了这些例子。
答案 0 :(得分:2)
首先,您需要将其命名为MemberSourceProperty
。 Property
后缀是您创建的每个道具的必要条件。
<ListView ItemsSource="{Binding ListOfMembers}">
<ListView.ItemTemplate>
<DataTemplate>
<!-- This will bind to the object being iterated (Member) -->
<memberCell:ListViewMemberCell MemberSourceProperty="{Bindable .}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
当然,您需要在xaml标头中加载memberCell
。 ListOfMembers
应该是您在ObservableCollection<Member>
视图中的BindingContext
。
我假设您将知道在ListViewMemberCell
课程中该做什么。要获取名称或图片,只需执行:Member.Name Member.Image ..
希望有所帮助