我发现Xamarin Forms XAML非常令人沮丧 .
如果我使用这种语法......
<ContentView.Resources>
<local:MyConverter1 x:Key="MyConverter1"/>
</ContentView.Resources>
我将从InitializeComponent()获得System.NullReferenceException . 堆栈跟踪或输出窗口或其他任何地方都没有告诉我什么是错的 . 注意:此语法在WPF中正常工作 .
经过很多努力,我发现我需要这种语法......
<ContentView.Resources>
<ResourceDictionary>
<local:MyConverter1 x:Key="MyConverter1"/>
</ResourceDictionary>
</ContentView.Resources>
同样适用于ListView DataTemplate . 抛出null引用异常......
<ListView.ItemTemplate>
<DataTemplate>
<Label Text="{Binding Converter={StaticResource MyConverter1}}"/>
</DataTemplate>
</ListView.ItemTemplate>
因为正确的语法是这个......
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label Text="{Binding Converter={StaticResource MyConverter1}}"/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
再次,这种语法在WPF中工作正常 . 我完全意识到Xamarin Forms不是WPF,但每当我使用在WPF中有效的XAML构造时,我就会厌倦被空引用异常打孔 .
调试Xamarin Forms XAML问题的最佳方法是什么?现在我只是简单地评论它,直到它开始工作 . 这类似于将打印语句放入命令式代码中 . 声明性代码应该优于命令式代码 . 我究竟做错了什么?
1 回答
这也让我绊倒了几次,我已经使用Xamarin.Forms 3年了 .
我提到这是Twitter上的一个问题,并被要求将其作为Github上的问题提出 .
https://github.com/xamarin/Xamarin.Forms/issues/1486
我添加了两个与你相匹配的例子 . 如果你能想到更多,请告诉我,我会添加它们 .
让我们希望这个问题能够尽早解决 .