У меня есть ListView
с шаблоном данных.Я пытаюсь создать пользовательский компонент, который поддерживает привязку к содержимому шаблона данных.
Вот ListView
на странице:
<ListView ItemsSource="{Binding List}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="entities:ListItem">
<ViewCell>
<components:ListItemView ListItem="{Binding}" />
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
И это объявление ListItemView
:
public partial class ListItemView : StackLayout
{
public static readonly BindableProperty ListItemProperty
= BindableProperty.Create(
nameof(ListItem), typeof(ListItem), typeof(ListItemView), null,
defaultBindingMode: BindingMode.TwoWay,
propertyChanged: ListItemPropertyChanged);
static void ListItemPropertyChanged(BindableObject bindable, object oldValue, object newValue)
{
var view = (ListItemView)bindable;
view.ListItem = (ListItem)newValue;
}
public ListItem ListItem
{
get => (ListItem)GetValue(ListItemProperty);
set
{
SetValue(ListItemProperty, value);
if (_viewModel != null) // never hits this break point
_viewModel.ListItem = value;
}
}
У меня была точка останова на линиис комментарием.Эта точка останова никогда не была достигнута.ListItemView
однако инициализируется и создается.
Обновление
Я попробовал простую демонстрацию, чтобы убедиться, что проблема была в привязке,
<StackLayout Padding="5">
<Label Text="{Binding Demo.Title}" />
<components:CheckListView ListItem="{Binding Demo}" />
</StackLayout>
Приведенный выше код был снаружипредставление списка , и я могу видеть заголовок.Точка останова все еще не достигнута.