0

我有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>

上面的代码在列表视图之外,我可以看到标题。断点仍未命中。

4

0 回答 0