【问题标题】:BindableProperty in ViewCellViewCell 中的 BindableProperty
【发布时间】:2018-07-07 12:50:09
【问题描述】:

我已将我的ViewCell 从 list-xaml 转移到一个单独的,现在我很难绑定属性。

我的ListView 的项目来源是“会员”的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,这样我就不需要为我想要公开的每个属性编写所有这些可绑定/属性更改了吗?

类似这样的:

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

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

【问题讨论】:

  • 你想要什么?为什么需要会员扩展 ViewCell ?我很确定你在这里混合了东西
  • 我不希望 Member 扩展 ViewCell,但我想将我的成员对象传递给我的 ViewCell 以呈现内容(如 XAML 中所述)。我想要我自己的 ViewCell 文件的原因是我需要大量重复使用它。
  • 好的,我现在明白了。

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


【解决方案1】:

首先,您需要将其命名为 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 应该是视图的BindingContext 中的ObservableCollection&lt;Member&gt;

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

希望对你有帮助

【讨论】:

  • 这正是我一直在寻找的!所以关键是点和属性要求。非常感谢,我会在测试后提供反馈。
  • 我现在对此有了更进一步的了解,我让我的所有成员都呈现了静态内容,但未呈现可绑定内容(尽管这不是这个问题的一部分)。
  • 开个玩笑,我打错了.. 非常感谢@greggz。
  • @Alex Np,与 XF 一起疯狂 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
相关资源
最近更新 更多