BindableProperty во ViewCell

Я перевел ViewCell из списка-xaml в отдельный, и теперь я борюсь с привязкой свойств.

мой ListViewИсточник предмета ObservableCollection "члена".

public class Member 
{
   public string Name { get; set; }
   public string Image { get; set; }
   public string Description { get; set; }
}

Итак, теперь я пытаюсь выяснить, как использовать свойство bindable в моем MemberViewCell.

Примеры, которые я читаю, довольно просты: я создаю BindableProperty для Name, а также обычное свойство для Name, когда Name изменяется, это вызывает графическое обновление.

Могу ли я создать BindableProperty на основе Member, чтобы мне не нужно было записывать все эти 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} чувствует себя не так, и ошибка говорит так же, но то, что я сделал, когда у меня был ViewCell в DataTemplate, было связать так {Bindable Name} /// Member.Name...

Я надеюсь, что это просто я неправильно понимаю примеры..

1 ответ

Решение

Сначала вам нужно назвать это 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>

И, конечно, вам нужно будет загрузить memberCell в заголовках xaml. ListOfMembers должен быть ObservableCollection<Member> что у вас есть в BindingContext зрения.

Я предполагаю, что вы будете знать, что делать в ListViewMemberCell учебный класс. Чтобы получить имя или изображение, просто выполните: Member.Name Member.Image ..

Надеюсь, поможет

Другие вопросы по тегам