ViewCell 中的 BindableProperty
BindableProperty in ViewCell
我已经将我的 ViewCell
从列表 xaml 转移到一个单独的列表,现在我很难绑定属性。
我的 ListView
的项目来源是 "member" 的 ObservableCollection
。
public class Member
{
public string Name { get; set; }
public string Image { get; set; }
public string Description { get; set; }
}
所以现在我想弄清楚如何在我的 MemberViewCell 中使用可绑定 属性。
我阅读的示例非常简单,我为 Name 创建了一个 BindableProperty 并为 Name 创建了一个正常的 属性,当 Name 被修改时,它将触发图形更新。
我能否在 Member 的基础上创建一个 BindableProperty,这样我就不需要为我想要公开的每个 属性 编写所有那些 bindables/property 更改?
像这样:
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
...
我希望只是我误解了这些例子..
首先,您需要将其命名为 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 headers 中加载 memberCell
。 ListOfMembers
应该是视图的 BindingContext
中的 ObservableCollection<Member>
。
我假设您会知道在 ListViewMemberCell
class 中该做什么。要获取名称或图像,只需执行以下操作:Member.Name Member.Image ..
希望对您有所帮助
我已经将我的 ViewCell
从列表 xaml 转移到一个单独的列表,现在我很难绑定属性。
我的 ListView
的项目来源是 "member" 的 ObservableCollection
。
public class Member
{
public string Name { get; set; }
public string Image { get; set; }
public string Description { get; set; }
}
所以现在我想弄清楚如何在我的 MemberViewCell 中使用可绑定 属性。
我阅读的示例非常简单,我为 Name 创建了一个 BindableProperty 并为 Name 创建了一个正常的 属性,当 Name 被修改时,它将触发图形更新。
我能否在 Member 的基础上创建一个 BindableProperty,这样我就不需要为我想要公开的每个 属性 编写所有那些 bindables/property 更改?
像这样:
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
...
我希望只是我误解了这些例子..
首先,您需要将其命名为 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 headers 中加载 memberCell
。 ListOfMembers
应该是视图的 BindingContext
中的 ObservableCollection<Member>
。
我假设您会知道在 ListViewMemberCell
class 中该做什么。要获取名称或图像,只需执行以下操作:Member.Name Member.Image ..
希望对您有所帮助