当前位置: 首页 > 知识库问答 >
问题:

绑定到命令的TapGesture识别器中数据刷新时的空引用异常

常哲彦
2023-03-14

我有一个列表视图,我通过单击按钮刷新其内容。列表视图绑定到可观察集合

iOS应用程序中的Main方法引发异常。

// NullReferenceException thrown here.
UIApplication.Main(args, null, "AppDelegate");

以下是堆栈跟踪。

位于Xamarin.Forms.Platform.iOS.EventTracker。在Xamarin.Forms.Platform.iOS.EventTracker的0中加载识别器()[0x0005d]。0中的OnElementChanged(System.Object发送方,Xamarin.Forms.Platform.iOS.VisualElementChange dEventArgs e)[0x0004e],位于Xamarin.Sforms.Platfor.iOS.Visual ElementRenderer<code>1[TElement]。OnElementChanged(Xamarin.Forms.Platform.iOS.ElementChangerdEventArgs1[TElement]e)[0x0002c]位于:0,位于Xamarin.Sforms.Platford.iOS.ViewRenderer2[TView,TNativeView]。OnElementChanged(Xamarin.Forms.Platform.iOS.ImageRenderer中的0中的Xamarin.Corms.Platfform.iOS.ElementChangerdEventArgs1[TElement]e)[0x00000]。

以下是有问题的代码。

<ListView ItemsSource="{Binding PeopleData}" HasUnevenRows="True">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <Grid>
                    ...
                    <Image VerticalOptions="Center"
                               Source="phone_icon"
                               WidthRequest="45"
                               HeightRequest="45"
                               Margin="0,0,5,0"
                               Opacity="0.27">
                            <!--<Image.GestureRecognizers>
                                <TapGestureRecognizer NumberOfTapsRequired="1" 
                                                      Command="{Binding Source={x:Reference PeoplePage}, Path=BindingContext.CallPersonCommand}"
                                                      CommandParameter="{Binding .}"></TapGestureRecognizer>
                            </Image.GestureRecognizers>-->
                        </Image>

                <Grid>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

如果取消注释,图像的< code > TapGestureRecognizer 会导致异常。该内容页面被命名为< code>PeoplePage。

第一次填充ListView是在应用程序启动时,没有错误。我第二次单击一个按钮重新填充ListView,效果很好。我再次单击一个按钮以刷新ListView-它会出错。

单击按钮只是刷新可观察集合中的数据

任何关于这方面的想法都非常感谢。谢谢!


共有2个答案

秦承安
2023-03-14

面临着同样的问题,但在Xamarin的最新版本中解决了这个问题。表格(2.5.1.444934)。

郑向阳
2023-03-14
匿名用户

我如下解决了这个问题。

之前,当我在观察者收藏中刷新数据时

// PeopleData is ObservableCollection<MyClass>
PeopleData.Clear();
foreach (var person in retrievedFromApiPeople)
{
    PeopleData.Add(person);
}

现在,我为< code>PeopleData属性添加了一个支持字段,并简单地为该属性分配一个新的< code > observable collection 并引发通知,如下所示。

private ObservableCollection<MyClass> _peopleData;
public ObservableCollection<MyClass> PeopleData
{
    get => _peopleData;
    set
    {
        _peopleData = value;
        // INotifyPropertyChanged implementation.
        RaisePropertyChanged(() => PeopleData);
    }
}

并按如下方式使用它。

PeopleData = retrievedFromApiPeople;

这种方法行得通。不知道为什么另一条路不行。

 类似资料:
  • 我正在为包含单个类的现有JAR创建一个Xamarin Android绑定库,并且按照Xamarin绑定库文档,我能够成功地使用以下方法重命名命名空间: 我还确认了'obj/debug'文件夹中生成的类中的命名空间发生了更改: 我面临两个问题: > 我无法从示例Android项目中引用。就像根本看不到命名空间一样。绑定项目成功生成,没有出错。 如果我删除包命名空间重命名设置,它也会成功生成,然后我就

  • > 我创建了一个函数,在该函数中我创建了表 我创建了另一个函数,它将我的数据从arraylist发布到我的表中。 到现在为止一切都很好。当我试图更新我的时,问题就出现了。实际上,我打开一个并尝试在列表中添加一个新项。我开始使用新项修改,但之后无法更新表,例如,我真的不知道将放在哪里,以及如何在需要时调用它。 我已经在这个网站上看到了一些问题,但我尝试的没有一个真正适用于我的程序。谢谢你的帮助,对不

  • 我一直在尝试使用OpenGL2绘制一个带有纹理的平面。在Android上安装了0个ES。然而,我不断收到一个logcat错误,上面写着“GLDrawerements:没有绑定到命令的数据-忽略”(tag:emuglesv2_enc),飞机不再显示。 我的飞机: } 顶点着色器: 片段着色器: Emulator在android 5.1.1上运行。

  • 问题内容: 我一直在尝试定义指令,以便可以根据字段的类型及其参数(存储在数据库中)以表格形式显示不同的“窗口小部件”。我需要对不同类型的场景做出反应,因此需要使用指令来处理布局。 在玩一些示例时,我想出了 kinda 可以工作的代码: HTML 指示 这似乎可行(尽管明显比* proper * angularJS变量绑定要慢),但我认为必须有更好的方法来做到这一点。谁能阐明这件事? 问题答案: 我

  • 我是Jface数据绑定的新手。我正在尝试使用数据绑定来生成表。当任何一个人单击row时,在映射的文本字段中显示vales。当我这样做时,我得到异常。(“java.lang.IllegalArgumentException:Could not find property with name in class class com.swt.pro.model.employee”)下面是类结构。 我有3个

  • 我使用Android Studio Beta 1与和。我还启用了数据绑定: 但不幸的是,Kotlin类看不到从布局生成的类,因为我会遇到如下错误: 错误:(17,31)未解析的引用:数据绑定 错误:(39,36)未解决的引用:MyFragment绑定 当然,Java类可以看到这些生成的类。