如何调试Xamarin Forms XAML

AQu*_*rky 7 c# xaml xamarin xamarin.forms

我发现Xamarin Forms XAML非常令人沮丧.

如果我使用这种语法......

<ContentView.Resources>
    <local:MyConverter1 x:Key="MyConverter1"/>
</ContentView.Resources>
Run Code Online (Sandbox Code Playgroud)

我将从InitializeComponent()获得System.NullReferenceException.堆栈跟踪或输出窗口或其他任何地方都没有告诉我什么是错的.注意:此语法在WPF中正常工作.

经过很多努力,我发现我需要这种语法......

<ContentView.Resources>
    <ResourceDictionary>
        <local:MyConverter1 x:Key="MyConverter1"/>
    </ResourceDictionary>
</ContentView.Resources>
Run Code Online (Sandbox Code Playgroud)

同样适用于ListView DataTemplate.抛出null引用异常......

            <ListView.ItemTemplate>
                <DataTemplate>
                    <Label Text="{Binding Converter={StaticResource MyConverter1}}"/>
                </DataTemplate>
            </ListView.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)

因为正确的语法是这个......

            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Label Text="{Binding Converter={StaticResource MyConverter1}}"/>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)

再次,这种语法在WPF中工作正常.我完全意识到Xamarin Forms不是WPF,但每当我使用在WPF中有效的XAML构造时,我都会厌倦被空引用异常打孔.

调试Xamarin Forms XAML问题的最佳方法是什么?现在我只是简单地评论它,直到它开始工作.这类似于将打印语句放入命令式代码中.声明性代码应该优于命令式代码.我究竟做错了什么?

Ste*_*rne 0

这也让我绊倒了几次,我已经使用 Xamarin.Forms 三年了。

我提到这是 Twitter 上的一个问题,并被要求将其作为 Github 上的问题提出。

https://github.com/xamarin/Xamarin.Forms/issues/1486

我添加了 2 个与你的匹配的例子。如果您还能想到更多,请告诉我,我会添加它们。

我们希望这个问题能够尽快得到解决。