在我们的应用程序中,我们根据用例在运行时动态加载一些 DataTemplate。而这些DataTemplate指的是另一层DataTemplates,这样下去可以持续两三层。由于有许多 DataTemplate 定义,我们可能会错过定义较低层 DataTemplate 之一。
坏事是 VisualStudio 没有警告丢失的 DataTemplate 并且构建正常而没有相关警告并且在运行时抛出异常。
如果没有编译器的帮助,获得无错误的代码完全是人类的努力。任何工具都可以帮助检测未定义但引用的 DataTemplate?
非常感谢。
例如,以下简化的 XAML 说明了该问题。Layer1 DataTemplates 是指 Layer2 DataTemplates。Layer1_0x00010D83_Layer2List_0x00010712_0x00010719是在运行时动态加载的,它指的是Layer2_0x00010712和Layer2_0x00010719。如果未定义 Layer2_0x00010719,则编译正常,但在运行时抛出错误。
<DataTemplate x:Key="Layer2_0x00010712">
<StackPanel >
<TextBlock Text="{Binding Converter={StaticResource NameConverter}}"
Style="{StaticResource NameTextBlockStyle}" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="Layer1_0x00010D83_Layer2List_0x00010712_0x00010719">
<local:Layer1Border x:Name="" Layer1ID="0x00010D83" >
<Grid>
<local:Layer2Border Grid.Column="0" Grid.Row="1"
<Button Content="{Binding}" ContentTemplate="{StaticResource Layer2_0x00010712}"/>
</local:Layer2Border>
<local:Layer2Border Grid.Column="1" Grid.Row="1"
<Button Content="{Binding}" ContentTemplate="{StaticResource Layer2_0x00010719}"/>
</local:Layer2Border>
</Grid>
</local:Layer1Border>
</DataTemplate>