ViewCell中的BindableProperty

时间:2018-01-28 20:17:53

标签: xaml xamarin.forms xamarin.forms.listview

我已将我的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那样绑定...

我希望我只是误解了这些例子。

1 个答案:

答案 0 :(得分:2)

首先,您需要将其命名为MemberSourcePropertyProperty后缀是您创建的每个道具的必要条件。

<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标头中加载memberCellListOfMembers应该是您在ObservableCollection<Member>视图中的BindingContext

我假设您将知道在ListViewMemberCell课程中该做什么。要获取名称或图片,只需执行:Member.Name Member.Image ..

希望有所帮助