XAML UWP ContainerFromItem为GridViewItem返回null

f1tvaqid  于 2023-05-11  发布在  其他
关注(0)|答案(2)|浏览(111)

我有以下GridView

<GridView 
    x:Name="gird_view" 
    Grid.Column="1" 
    ItemsSource="{x:Bind workers}"
    ContainerContentChanging="gird_view_ContainerContentChanging">
    <GridView.ItemContainerStyle>
        <Style TargetType="GridViewItem">
            <Setter Property="Margin" Value="10"/>
        </Style>
    </GridView.ItemContainerStyle>
    <GridView.ItemTemplate>
        <DataTemplate x:DataType="models:Worker">
            <local:WorkerControl ViewModel="{x:Bind}"/>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

我正在尝试遵循代码

private async void gird_view_ContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args)
{
    GridViewItem item = args.ItemContainer as GridViewItem;

    await Task.Delay(5000);
    var _Container = gird_view.ContainerFromItem(item);
    if (_Container == null)
    {
        return;
    }
}

_Container始终为null,有或没有延迟。知道为什么吗

ef1yzkbh

ef1yzkbh1#

GridViewItem是容器:

GridViewItem item = args.ItemContainer as GridViewItem;

要获取该容器的数据对象,即你的Worker对象,你应该使用Item属性:

Worker worker = args.Item as Worker;

在这种情况下不需要使用ContainerFromItem

2g32fytz

2g32fytz2#

_Container始终为null,因为ContainerFromItem方法的参数应该是一个数据模型类。该方法用于根据给定的数据对象得到对应的GridViewItem。在你的场景中,如果你想得到一个GridViewItem,你应该像这样使用它:

var _Container = gird_view.ContainerFromItem(WorkerObject);

但是我对你的逻辑感到困惑,实际上你已经通过args.ItemContainer得到了GridViewItem。不需要再次调用ContainerFromItem方法。

相关问题