Да, есть причины. Но если вы еще не нашли их, вам, вероятно, сейчас это не нужно.
Наиболее очевидная причина в том, что вам нужно обратиться к нему из вашего XAML. Например, вы работаете с привязкой данных и используете ListView
. На ListView
вы используете простой TextCell
, который имеет контекстные действия. XAML может выглядеть так (взято из здесь и немного подправлено):
<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
.
Возможно, есть и другие примеры, но это выдающийся. Если вам не нужно никоим образом ссылаться на страницу, присвоив ей имя, не добавляйте никакого реального значения.