Есть ли какая-либо причина для указания имени x: Name на странице XAML форм Xamarin? - PullRequest
0 голосов
/ 06 июля 2018

У меня есть код 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>

My C #

using System;
using System.Collections.Generic;

using Xamarin.Forms;

namespace Japanese
{
    public partial class GettingStarted : ContentPage
    {
        public GettingStarted()
        {

Код работает нормально, но я хотел бы знать, есть ли какое-либо преимущество или нормально указывать x: Name в XAML?

1 Ответ

0 голосов
/ 06 июля 2018

Да, есть причины. Но если вы еще не нашли их, вам, вероятно, сейчас это не нужно.

Наиболее очевидная причина в том, что вам нужно обратиться к нему из вашего 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.

Возможно, есть и другие примеры, но это выдающийся. Если вам не нужно никоим образом ссылаться на страницу, присвоив ей имя, не добавляйте никакого реального значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...