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...

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

首先,您需要将其命名为 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 headers 中加载 memberCellListOfMembers 应该是视图的 BindingContext 中的 ObservableCollection<Member>

我假设您会知道在 ListViewMemberCell class 中该做什么。要获取名称或图像,只需执行以下操作:Member.Name Member.Image ..

希望对您有所帮助