我有如下所示的XAML代码;
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Japanese;assembly=Japanese"
x:Class="Japanese.GettingStarted"
x:Name="gettingStarted"
Title="Getting Started">
<ContentPage.Content>
我的C#
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace Japanese
{
public partial class GettingStarted : ContentPage
{
public GettingStarted()
{
代码工作正常,但是我想知道在XAML中指定x:Name是否有任何优势或正常吗?
答案 0 :(得分:2)
是的,有原因。但是,如果您还没有找到它们,您现在可能就不需要了。
最明显的原因是是否需要从XAML引用它。例如,您正在使用数据绑定并使用ListView
。在ListView
上,使用具有上下文操作的简单TextCell
。 XAML可能看起来像这样(取自here,并做了一些调整):
<ListView ItemsSource="{Binding YourItems}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.ContextActions>
<MenuItem Command="{Binding DeleteCommand}" CommandParameter="{Binding .}" Text="Delete" IsDestructive="True" />
</ViewCell.ContextActions>
<StackLayout Padding="15,0">
<Label Text="{Binding title}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
现在,如果您以前使用过数据绑定,您将知道其中MenuItem
的绑定已绑定到YourItems
集合中对象的每个实例。
但是,在该集合中的实例上执行删除命令没有任何意义。您可能希望在视图模型中使用它。为此,您必须给页面起一个名字,并参考如下命令:<MenuItem Command="{Binding Source={x:Reference MyPage}, Path=BindingContext.DeleteCommand}" CommandParameter="{Binding .}" Text="Delete" IsDestructive="True" />
,其中MyPage
是您在x:Name
属性中输入的值。>
可能还有其他示例,但这是一个突出的例子。如果您不必以任何方式引用该页面,则为其命名就不会增加任何实际价值。