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 ..
Надеюсь, поможет