Aspnetcore: рдЯреЗрдореНрдкрд▓реЗрдЯ рдЖрдзрд╛рд░рд┐рдд рдШрдЯрдХ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рдорд╛рд░реНрдЪ 2018  ┬╖  60рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dotnet/aspnetcore

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЧреНрд░рд┐рдб рдпрд╛ рд▓рд┐рд╕реНрдЯ рд╡реНрдпреВ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореЗрд░рд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд░реЗрдЬрд░ рдХреЛ рдПрдЪрдЯреАрдПрдордПрд▓ рдореБрд╣рд╛рд╡рд░реЛрдВ рдХреЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрд░реАрдм рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╣рдо рдПрдХреНрд╕рдПрдПрдордПрд▓ рдореЗрдВ рджреЗрдЦреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореБрд╣рд╛рд╡рд░реЛрдВ рдХреА рдУрд░ рдмрдврд╝реЗрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рдПрдХреНрд╕рдПрдПрдордПрд▓ рдЪреАрдЬреЛрдВ рдХреА рдмрдЬрд╛рдп <table> рдореЗрдВ рджреЗрдЦреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреА рддрд░рд╣ рджрд┐рдЦ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдЖрдкрдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдХрд┐рд╕реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА "рд░реЗрдЬрд░ рдПрдЪрдЯреАрдПрдордПрд▓ рд╣реИ" рдХреЗ рд╢рд┐рд╡рд┐рд░ рдореЗрдВ рдмрд╣реБрдд рдордЬрдмреВрддреА рд╕реЗ рд╣реВрдВред

рд╕рднреА 60 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдШрдЯрдХ рдХреЗ рднреАрддрд░ рдмрдЪреНрдЪреЗ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ Action<RenderTreeBuilder, T> рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреА рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдбрд┐рдЬрд╛рдЗрди рдкрд░ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд╕рдордпред рддрдм рд╣рдорд╛рд░рд╛ рдбрд┐рдЬрд╝рд╛рдЗрди-рдЯрд╛рдЗрдо рдХреЛрдбрдЬрди рдЙрд╕ рдЪрд╛рдЗрд▓реНрдб рдПрд▓рд┐рдореЗрдВрдЯ рдХреЗ рдЕрдВрджрд░ рд░реЗрдЬрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд▓рд┐рдЦрддреЗ рд╕рдордп рд╕рд╣реА рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рд╕рдВрджрд░реНрдн рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг:

<MyListWithHeader RowItems=@People>
    <Title>
        Here I'm still in the outer context so can reference properties on the component itself 
        such as <strong i="8">@TitleText</strong>
    </Title>
    <RowTemplate> <!-- Somehow need intellisense to know that RowTemplate is meaningful here, and that its "item" value is taken from the generic type arg on the RowItems property -->
        Here I'm in the context of an Action<RenderTreeBuilder, Person> because we supplied
        an IEnumerable<Person> as the value for RowItems, so I can write @item.FirstName
    </RowTemplate>
</MyListWithHeader>

<strong i="9">@functions</strong>
{
    string TitleText { get; set; }
    IEnumerable<Person> People { get; set; }

    class Person
    {
        public string FirstName { get; set; }
    }
}

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдХрд┐рддрдирд╛ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕рдВрднрд╡рддрдГ рдКрдкрд░ рдХреЗ рд╕реНрдХреЗрдЪ рдореЗрдВ рд╕рдВрдХреЗрдд рд╕реЗ рдХрдо рд╕рд╛рдорд╛рдиреНрдпред @rynowak рдпрд╣рд╛рдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реЛрдЧрд╛ред рд╕рднреА рдЬрдЯрд┐рд▓рддрд╛ рдбрд┐рдЬрд╛рдЗрди/рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рд╣реИред рдЗрд╕реЗ рдХрд┐рд╕реА рд░рдирдЯрд╛рдЗрдо рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВред

рд╣рд╛рдп рдиреЗ рдЗрд╕реЗ рдПрдХ рдЖрдИрдиреЗрдореЗрд░реЗрдмрд▓ рдкрд╛рд╕ рдХрд░рдХреЗ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАрдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдПрдХ рдЧреНрд░рд┐рдб рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рд▓реЗрдХрд┐рди рдкреИрд░рд╛рдореАрдЯрд░ рдмрджрд▓рдиреЗ рдкрд░ рдореИрдВ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ред рдпрд╣ рдХреЛрдб рд╣реИ:

<table class="@ClassName">
  <tr>
    <strong i="7">@foreach</strong> (var col in Columns)
    {
      <th>@col</th>
    }
  </tr>

  <strong i="8">@foreach</strong> (System.Data.DataRow row in table.Rows)
  {
    <tr>
      <strong i="9">@foreach</strong> (var col in Columns)
      {
        <td>@row[col]</td>
      }
      <strong i="10">@if</strong> (Select != null)
      {
        <td><a @onclick(() => Select(row))>Seleccionar</a></td>
      }
    </tr>
  }
</table>

@functions{
    public string ClassName { get; set; }
    public List<string> Columns { get; set; }
    public object DataSource { get; set; }
    private System.Data.DataTable table;


    private string Log;

    //call backs it seens I will have many of them

    public Action Change { get; set; }
    public Action<object> Select { get; set; }

    protected void UpdateState()
    {
      int count = ((IEnumerable<object>)DataSource).Count();
      Log = $"Table count rows:{table.Rows.Count} count object ${count}";
      StateHasChanged();
    }

    protected override void OnInit()
    {
      base.OnInit();

      Change += StateHasChanged;

      var enumerable = (IEnumerable<object>)DataSource;
      table = new System.Data.DataTable();

      if (Columns == null)
      {
        Columns = new List<string>();
        Columns.AddRange(enumerable.FirstOrDefault().GetType().GetProperties().Select(x => x.Name).ToList());
      }


      Columns.ForEach(x =>
      {
        table.Columns.Add(x);
      });

      enumerable.ToList()
                .ForEach(x =>
                {
                  var row = table.NewRow();

                  foreach (var property in x.GetType().GetProperties())
                  {
                    row[property.Name] = property.GetValue(x);
                  }

                  table.Rows.Add(row);
                });

      StateHasChanged();
    }
}

@SteveSandersonMS , рдХреНрдпрд╛ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ Title рдФрд░ RowTemplate рдХрд╛ рдорддрд▓рдм MyListWithHeader рдпрд╛ рд╡рд┐рд╢реЗрд╖ рдШрдЯрдХреЛрдВ рдХреЗ рдЧреБрдг рд╣реИрдВ? рдпрджрд┐ рд╡реЗ рдЧреБрдг рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ...

рдореИрдВ рдПрдХреНрд╕рдПрдПрдордПрд▓ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЬрдм рдореИрдВрдиреЗ рдмреНрд▓реЗрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рддреЛ рдореБрдЭреЗ рддреБрд░рдВрдд рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдорд╣рд╕реВрд╕ рд╣реБрдИред рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдПрдХреНрд╕рдПрдПрдордПрд▓ рдХрд╛ рд╕рдВрдкрддреНрддрд┐ рддрддреНрд╡ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЙрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдХрд╛рдлреА рд╡рд░реНрдмреЛрдЬрд╝ рд╣реЛрдиреЗ рдкрд░, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо MyListWithHeader рдЪрд╛рдЗрд▓реНрдб рдШрдЯрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдпрд╣рд╛рдВ рдЧреБрдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг:

<MyListWithHeader>
    <MyListWithHeader.Title>
       ...
    </MyListWithHeader.Title>
    <MyListWithHeader.RowTemplate>
       ...
    </MyListWithHeader.RowTemplate>
</MyListWithHeader>

рдореЗрд░рд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд░реЗрдЬрд░ рдХреЛ рдПрдЪрдЯреАрдПрдордПрд▓ рдореБрд╣рд╛рд╡рд░реЛрдВ рдХреЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрд░реАрдм рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╣рдо рдПрдХреНрд╕рдПрдПрдордПрд▓ рдореЗрдВ рджреЗрдЦреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореБрд╣рд╛рд╡рд░реЛрдВ рдХреА рдУрд░ рдмрдврд╝реЗрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рдПрдХреНрд╕рдПрдПрдордПрд▓ рдЪреАрдЬреЛрдВ рдХреА рдмрдЬрд╛рдп <table> рдореЗрдВ рджреЗрдЦреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреА рддрд░рд╣ рджрд┐рдЦ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдЖрдкрдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдХрд┐рд╕реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА "рд░реЗрдЬрд░ рдПрдЪрдЯреАрдПрдордПрд▓ рд╣реИ" рдХреЗ рд╢рд┐рд╡рд┐рд░ рдореЗрдВ рдмрд╣реБрдд рдордЬрдмреВрддреА рд╕реЗ рд╣реВрдВред

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХреЗ рд╕рдорд░реНрдерди рдореЗрдВред рдЕрдЧрд░ рд╣рдо "IENumerable" рдХреЗ рдмрдЬрд╛рдп рдЖрдЗрдЯрдо "рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЛрд▓реЗрдХреНрд╢рди" рдХреА рд╕реВрдЪреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдмреЛрдирд╕ рд╣реЛрдЧрд╛ред xaml рдХреА рддрд░рд╣ pattrens рдХреА рдУрд░ рдмрдврд╝рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдПрдХ рдЙрдЪрд┐рдд рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рд┐рд╕реНрдЯрдо рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ html рдХреА рдХрдореА рд╣реЛрддреА рд╣реИ, рд╡реЗрдм ui рдореЗрдВ рд╕рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рд┐рд╕реНрдЯрдо рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд╛рд╣рд┐рд░ рд╣реИ рдмреНрд▓реЗрдЬрд╝рд░ рдореЗрдВ рднреА рдПрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдПрдХ рдирдпрд╛ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рдПрдХ рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдордПрд╕ рдФрд░ рдХрдИ рдиреЗрдЯ рджреЗрд╡реЛрдВ рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдпрд╣ рдЕрднреА рднреА рдПрдЪрдЯреАрдПрдордПрд▓/рд╕реАрдПрд╕рдПрд╕ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдПрдЪрдЯреАрдПрдордПрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрднреА рднреА рддрдХрдиреАрдХ рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рд╣реЛрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХреНрд╕рдПрдПрдордПрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рди рдЬрд╛рдиреЗ рдХреНрдпреЛрдВ рдПрдЪрдЯреАрдПрдордПрд▓ Guyx рд╣рд╛рд▓рд╛рдВрдХрд┐ xaml рд╕реЗ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реИ) рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ xaml pattrens рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдЧрд╛ред

@DamianEdwards рдореИрдВ "рд░реЗрдЬрд░ HTML рд╣реИ" рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЖрдкрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, HTML рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди рд╣рдореЗрд╢рд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЯреИрдЧ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдмрдЪреНрдЪреЗ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдЬреИрд╕реЗ рдЬрдЯрд┐рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рдиреЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ (рдФрд░ рдЗрд╕рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ) рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк рд▓рд┐рдЦ рдирд╣реАрдВ рд╕рдХрддреЗ

<a>
    <href>http://dot.net</href>
</a>

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЬреЛ рд▓рдХреНрд╖реНрдп рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕реЗ рд╢реБрджреНрдз HTML рдореЗрдВ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ:

  1. HTML рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд░рд╣реЗрдВ : рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдШрдЯрдХ рдХреЗ рд╢реБрд░реБрдЖрддреА рдЯреИрдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

    • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдиреЗ рдпрд╣реА рдЪреБрдирд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
      <MyListWithHeader RowTemplate={(data) => <p>...</p>} />
    • рдкреНрд░реЛ : рд╕рд╛рдорд╛рдиреНрдп HTML рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм
    • Con : рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрдиреНрджрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕
  2. HTML рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд░рд╣реЗрдВ : рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХрд┐рд╕реА рдШрдЯрдХ рдХреЗ рдЪрд╛рдЗрд▓реНрдб рдиреЛрдбреНрд╕ рдиреЗрд╕реНрдЯреЗрдб рддрддреНрд╡реЛрдВ рдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

    • рдкреНрд░реЛ : рд╕рд╛рдорд╛рдиреНрдп HTML рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм
    • Con : рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЙрдкрд░реНрдЯреА рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдФрд░ рдЪрд╛рдЗрд▓реНрдб рдПрд▓рд┐рдореЗрдВрдЯ рд╡рд╛рдХреНрдп-рд░рдЪрдирд╛ рдХреА рджреГрд╖реНрдЯрд┐ рд╕реЗ рдЕрдкреНрд░рднреЗрджреНрдп рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, <Title>...</Title> рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдШрдЯрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдмрдХрд┐ <RowTemplate>...</RowTemplate> рдЖрд╕рдкрд╛рд╕ рдХреЗ <MyListWithHeader> рдПрдХ рд╕рдВрдкрддреНрддрд┐ (рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛) рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - IntelliSense рдХреЗ рдмрд┐рдирд╛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ
    • Con : рдпрджрд┐ рдХреЛрдИ рдШрдЯрдХ рдФрд░ рд╕рдорд╛рди рдирд╛рдо рд╡рд╛рд▓реА рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рддреЛ рдирд╛рдордХрд░рдг рдХреЗ рд╡рд┐рд░реЛрдз рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ
  3. рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░реЗрдВ : рдПрдХреНрд╕рдПрдПрдордПрд▓ рдХрд╛ рдкреНрд░реЙрдкрд░реНрдЯреА рдПрд▓рд┐рдореЗрдВрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдпрд╣ рдХреБрдЫ рд░реЗрдЬрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг <strong i="39">@functions</strong> { } рдпрд╛ рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

    • рдкреНрд░реЛ : рдкрдардиреАрдп рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЬрдЯрд┐рд▓ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
    • Con : рд╡реЗрдм рджреЗрд╡реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ

рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдБ рдХреБрдЫ рдЧрд▓рдд рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдБред рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред

@SvenEV рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ xaml рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд┐рд╕реА рдХреЛ рднреА рдЕрд▓рдЧ рдХрд░ рджреЗрдЧрд╛, рдпрджрд┐ рдЖрдк рдзреНрдпрд╛рди рджреЗрдВ, рдХреЛрдгреАрдп, рд╡реВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рд▓рд╛рдЦреЛрдВ рдЕрдиреНрдп рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕, рд╕рднреА рдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рдФрд░ рд╕рд╛рдорд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИрдВ, рдлрд┐рд░ рднреА рдЙрди рд╕рднреА рдХреЛ рдкреНрдпрд╛рд░ рд╣реИ, рдирд╣реАрдВ? рдЗрд╕реА рддрд░рд╣ рдмреНрд▓реЗрдЬрд╝рд░ рдХрд╛ рдЕрдкрдирд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рд╕рдорд░реНрдердХ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ (рдЗрд╕рд▓рд┐рдП xaml рджреЗрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реАрдЦрдиреЗ рдХреА рдЕрд╡рд╕реНрдерд╛) рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрд╡реЗрдм рджреЗрд╡реЛрдВ рдХреЛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡реИрд╕реЗ рднреА рдмреНрд▓реЗрдЬрд╝рд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реАрдЦ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ рдЪрд╛рд╣реЗ рдмреНрд▓реЗрдЬрд╝рд░ xaml рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ рдпрд╛ рдирд╣реАрдВ, рд╡реЗрдм рджреЗрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реАрдЦрдиреЗ рдХреА рдЕрд╡рд╕реНрдерд╛ рд╕рдорд╛рди рд░рд╣рддреА рд╣реИ, рд╡реЗрдм рджреЗрд╡реЛрдВ рдХреЛ рдЗрд╕ рдЦрд╛рдореА рд╕реЗ рджреВрд░ рд░рд╣рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдмреНрд▓реЗрдЬрд╝рд░ рд╕реАрдзреЗ html рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рд╣реЛрдЧрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЙрдбрд▓ред :)

рдЗрд╕рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдпрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕реАрдЦрдиреЗ рдХреА рдЕрд╡рд╕реНрдерд╛ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреИрд╕рд╛ xaml рдЖрдзреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдХрдо рд╕реЗ рдХрдо рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди xaml рднреА рдПрдЪрдЯреАрдПрдордПрд▓ рдХреА рддрд░рд╣ рд╣реИ, рджреЛрдиреЛрдВ рдорд╛рд░реНрдХрдЕрдк рдмрд╛рдж рдореЗрдВ рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдЗрд╕реЗ рд╕реАрдЦ рд▓реЗрдВрдЧреЗ, рддреЛ рдпрд╣ рдХреЗрдХ рдХрд╛ рдЯреБрдХрдбрд╝рд╛ рд╣реЛрдЧрд╛, рдПрдХреНрд╕рдПрдПрдордПрд▓ рддрд░реАрдХреЗ рд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рд╕рднреА рд╕реНрдЯрд╛рдЗрд▓ рдирд┐рдпрдВрддреНрд░рдг рдкрд░ рд╕реАрдзреЗ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╕реНрдЯрд╛рдЗрд▓ рдХреЛ рднреА рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдУрд░ html рдФрд░ css рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВред

рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рд░реЗрдЬрд╝рд░ рдореЗрдВ рдлрд╝реЛрд░реИрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИред
рдпрд╛ рдпрд╣ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реИ? рдореИрдВ рдПрдХ рдЕрд▓рдЧ рдШрдЯрдХ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ foreach рдХрд░рддрд╛ рд╣реИред

@MihaMarkic рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рдм рдХреБрдЫ рдорд╛рдирдХреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рд╕рднреА рдЬрдЯрд┐рд▓ рдХреЛрдб рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдХреЛрдб рдХреА 2 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЙрд╕ рд░реИрдк рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреБрди: рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд┐рдпрд╛ред

рдЦреИрд░, рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред IMO foreach рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реИ, рдмрд╕ рдПрдХ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИ рдФрд░ рдЖрдк рдПрдХ "foreach" рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдШрдЯрдХ рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдХреА рдЙрди рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдХрд╣реАрдВ рд╕реЗ рднреА рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

foreach рд╕рд┐рд░реНрдл рдПрдХ рд▓реВрдк рд╣реИ рдФрд░ рд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рд╣рдо рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдореВрд▓ ListView ( рддрд╛рд▓рд┐рдХрд╛ ) рдХреЗ рд▓рд┐рдП рд╣рдо рдмрд╕ рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рдЗрдирдкреБрдЯ рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕реЗ рдлреЛрд░рдЪреЙрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЯреЗрдмрд▓ рдереВрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣рдореЗрдВ рдмрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдПрдХ рдЯреИрдЧ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдПрдРрд╕рд╛ рдХреБрдЫ рдФрд░ рдлрд┐рд░ рд╣рдо рдПрдХ рдЯреЗрдмрд▓ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ, рдЕрдЧрд░ рд╣рдо рдПрдХ рдЖрдзреБрдирд┐рдХ рдбрд┐рдЬрд╛рдЗрди, рдЕрддреНрдпрдзрд┐рдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЗрддреНрдпрд╛рджрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рд╕реВрдЪреАрджреГрд╢реНрдп рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо foreach рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдШрдЯрдХ рдирд┐рдпрдВрддреНрд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрдЯреЛрдо рд╕реАрдПрд╕рдПрд╕, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмреНрд▓реЗрдЬрд╝рд░ рдХреЛрдб, рд╢рд╛рдпрдж рдПрдХрд╛рдзрд┐рдХ рдлрд╝рд╛рдЗрд▓реЗрдВ, рдФрд░ рдЙрди рд╕рднреА рдХреЛ 1 рдШрдЯрдХ рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ, рдФрд░ рдлрд┐рд░ рдЙрд╕ рд╕рднреА рдХреЛ рдХреЗрд╡рд▓ 1 рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╣рд╛рдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ? рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдХрд┐рддрдирд╛ рдХреЛрдб рд╣реИ, рд╡рд╣ рд╕рдм 1 рдЯреИрдЧ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ :) @ рдорд┐рд╣рд╛рдорд╛рд░реНрдХрд┐рдХ

рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдХрдИ рдЖрдЗрдЯрдо рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдПрдХ рдШрдЯрдХ рдХреЗ рдХрдИ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдПрдХ рдШрдЯрдХ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдРрд╕рд╛ "рдЫреЗрдж" рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ ChildContent рд╕реЗ рднрд░рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдВрдкрддреНрддрд┐, рдЬреИрд╕реЗ:

<div style="some fancy styling">
    <strong i="7">@ChildContent</strong>
</div>

рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдПрдХ рд╕рдВрд╡рд╛рдж рдЬреИрд╕реЗ рдХрдИ "рдЫреЗрдж" рдХреЗ рд╕рд╛рде рдПрдХ рдШрдЯрдХ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╢реАрд░реНрд╖рд▓реЗрдЦ, рдпрд╛ рдПрдХ рдмрдЯрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдЖрдВрддрд░рд┐рдХ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдФрд░ рдЯреВрд▓рдЯрд┐рдк рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╢рд╛рдпрджред рддреЛ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдирд┐рдореНрди рдХреА рддрд░рд╣ рдХреБрдЫ рд▓рд┐рдЦ рд╕рдХреЗрдВ (рдЬреЛ рднреА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реЛрдЧрд╛):

<MyButton>
    <h2>I am the button caption (the usual ChildContent)</h2>

    <MyButton.ContextMenu>
        <button>Context menu button 1</button>
        <button>Context menu button 2</button>
    </MyButton.ContextMenu>

    <MyButton.ToolTip>
        This explains <strong>what the button does</strong>. It is displayed when hovering over the button.
    </MyButton.ToolTip>
</MyButton>

@SvenEV рдХреНрдпрд╛ рд╕рд┐рд░реНрдл рдХрдИ рдЫреЗрдж рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдХрдбрд╝рд╛рдИ рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?

рд╣рд╛рдБ рдпрд╣ рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧрдХреЗрд╕ рдХрд╛ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@MihaMarkic рдпрд╣ рд╕рдЪ рд╣реИ, рд╣рдо рдпрд╣рд╛рдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

  1. рдХрдИ рдЫреЗрджреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди ( RenderFragment s / Action<RenderTreeBuilder> ) рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ
  2. рдЙрди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬрд┐рдирдореЗрдВ рдбреЗрдЯрд╛ рдЗрдирдкреБрдЯ ( Action<RenderTreeBuilder, T> ) рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ ListView рдЖрджрд┐ рдореЗрдВ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╣рдореЗрдВ рдХреБрдЫ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдШрдЯрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛ред

рдпрд╣ рдХрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ? рдореИрдВ рдмрд╕ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЕрдиреНрдп рдПрд╕рдкреАрдП рдврд╛рдВрдЪреЗ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬ рдирд╣реАрдВ рджреЗрдЦреА рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдШрдЯрдХ рдЖрдзрд╛рд░рд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░рддрд╛ рд╣реИ? рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдерд╛рдУрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдзрд┐рдХ "рдРрдк-рдЬреИрд╕реА" рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ?

@AWulkan рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдШрдЯрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд╛рдБ рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рдХреА рддрд░рд╣ рдРрдк-рджреЗрд╡ рдХреА рдУрд░ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рд╕реЗ рджреВрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдмреАрд╕реАрдЬреЗ рд╕рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рдврд╛рдВрдЪреЗ рднреА рд╡рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдкреВрд░рд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрд╕рдкреАрдП рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреА рдпрд╣ рдереАред рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдХреЛ рдРрдк рд╡рд┐рдХрд╛рд╕ рдХреА рддрд░рд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдкреАрдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдЕрдм рд╣рд░ рдврд╛рдВрдЪрд╛ рд╕реНрдкрд╛ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣рд╛ рд╣реИред рд╕реНрдкрд╛ рдХрд╛ рдЕрдЧрд▓рд╛ рдЪрд░рдг рдЕрдм pwa рд╣реИред рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ pwa рдХреНрдпрд╛ рд╕рд╣реА рд╣реИ? рдпрд╣ рдореВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреИрд╕реЗ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рдФрд░ рдСрдлрд▓рд╛рдЗрди рд╕рд┐рдВрдХ рд╕реЗ рдХреБрдЫ рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдВрддрддрдГ рд╡реЗрдм рджреЗрд╡ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рджреЗрд╢реА рдРрдк рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред

@AWulkan рдЪреВрдВрдХрд┐ рдЖрдк Vue рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрднреА Vue рдбреЙрдХреНрд╕ рдореЗрдВ рджреЗрдЦрд╛ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рд╣реИред рд╡рд╣рд╛рдБ рд╣реИ рдФрд░ рдЗрд╕реЗ " рд╕реНрд▓реЙрдЯ " рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ "рдирд╛рдорд┐рдд рд╕реНрд▓реЙрдЯ" рдФрд░ "рд╕реНрдХреЛрдкреНрдб рд╕реНрд▓реЙрдЯреНрд╕" - рдареАрдХ рдпрд╣реА рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдпрд╣ рд╡рд╣реА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдЖрдкрдХреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ?

@SvenEV рдУрдХреЗ рдореИрдВ рдереЛрдбрд╝реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореЗрд░рд╛ рд╕рдВрдмрдВрдз рд╣реИ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рд╡рд╣ рдЗрд╕ рдорд╕реМрджреЗ рдХреЛ рдПрдХ рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдЧреА?
https://github.com/w3c/webcomponents/blob/gh-pages/proposals/Slots-Proposal.md

рд▓рдЧрддрд╛ рд╣реИ Vue.js рд╕реНрд▓реЙрдЯ XAML рдбреЗрдЯрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рдорд╛рди рд╣реИред
рдЯреЗрдореНрдкреНрд▓реЗрдЯрд┐рдВрдЧ рдореМрдЬреВрджрд╛ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдорд╛рдорд▓рд╛ рдЬреЛ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ рд╡рд╣ рдПрдХ рд╕реВрдЪреА рджреГрд╢реНрдп рд╣реИ рдЬрд╣рд╛рдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрд┐рдирд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯрд┐рдВрдЧ рдХреЗ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рд╕реВрдЪреА рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

<ListView list=<strong i="7">@ListOfUrlsAsStrings</strong> />

рдЯреЗрдореНрдкреНрд▓реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрдк рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдкрд╛рд╕ рдХрд┐рдП рдЧрдП Type T рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЫрд╡рд┐ рдЯреИрдЧ рдХреА рдПрдХ рд╕реВрдЪреА рджрд┐рдЦрд╛рдПрдВред

<ListView list=@ListOfUrlsAsStrings>
    <ListView.ListTemplate>
         <img src=<strong i="12">@item</strong> alt="overriden by a template" />
        <CustomComponentHere />
    </ListView.ListTemplate>
</ListView>

рдпрд╣ рдШрдЯрдХреЛрдВ рдХреА рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЧрддрд┐рд╢реАрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдШрдЯрдХ рд╡рд┐рдХреНрд░реЗрддрд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдШрдЯрдХреЛрдВ рдХреЛ рд╕рдВрд▓реЗрдЦрд┐рдд рдХрд░рдиреЗ рдкрд░ рдЕрдзрд┐рдХ рд░рдЪрдирд╛рддреНрдордХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рдБ рдмрд┐рд▓реНрдХреБрд▓ рдбреЗрдЯрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдФрд░ рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

рд╣рдореЗрдВ рдмрд╣реБрдд рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдмреНрд▓реЗрдЬрд╝рд░ рдШрдЯрдХреЛрдВ рдХреЛ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдФрд░ рдЯреЗрдВрдкрд▓реЗрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╕рдорд░реНрдерди рдорд┐рд▓реЗрдЧрд╛ред
рдкрд╣рд▓реЗ рд╣рдордиреЗ рд░реЗрдЬрд░ рдЯреИрдЧ рд╣реЗрд▓реНрдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╡рд┐рд╖рдп рдкрд░ @Mehul , @NTaylorMullen , @DamianEdwards рдХреЗ рд╕рд╛рде рдХрдИ рдЪрд░реНрдЪрд╛рдПрдБ рдХреА рдереАрдВ , рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА рдХрд┐ рд╣рдореЗрдВ рдЕрдзрд┐рдХ XAML- рдЬреИрд╕реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЧрд┐рдЯрд╣рдм рдореБрджреНрджреЗ: рдПрд╕реНрдкрдиреЗрдЯ/рд░реЗрдЬрд░ # 474, рдПрд╕реНрдкрдиреЗрдЯ/рд░реЗрдЬрд░ # 576, рдПрд╕реНрдкрдиреЗрдЯ/рд░реЗрдЬрд░ # 570ред

рд╣рдо рдбреЗрдЯрд╛ рдЧреНрд░рд┐рдб рдЬреИрд╕реЗ рдпреВрдЖрдИ рдШрдЯрдХ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рд░реНрдХрдЕрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЯрд╣рдиреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

<TabPanel>
    <Grid>
        <DataSource>
            <More about data source />
        </DataSource>

        <Column />
        <Column>
            <Lookup>
                <DataSource>
            . . .
            <CellTemplate>
                arbitrary html
            </CellTemplate>
        </Column>

        <DetailTemplate>
            <div>arbitrary content</div>
            <ThirdPartyComponent />

            <Grid>
                detail grid configuration with own templates (and there may be more levels)
            </Grid>
        </DetailTemplate>
    </Grid>
</TabPanel>

рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП, рдПрдХ рдбреЗрд╡рд▓рдкрд░ рд╕рдЯреАрдХ рд╕рдВрджрд░реНрдн рдЬрд╛рдЧрд░реВрдХрддрд╛ рдФрд░ рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдЪрд╛рд╣рддрд╛ рд╣реИред

@AlekseyMartynov рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ + рдПрдирд┐рдореЗрд╢рди рдЬреИрд╕реЗ xaml рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░реНрд╖рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдПрдордПрд╕ рдиреЗ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ, рдбрдмреНрд▓реНрдпреВрдкреАрдПрдл рдФрд░ рдпреВрдбрдмреНрд▓реНрдпреВрдкреА рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯреЗрдмрд▓ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдмреАрдбрд╝рд╛ рдЙрдард╛рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдмреНрд▓реЗрдЬрд╝рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдПрдХ рдкреНрд░рд╢реНрди рдбреЗрдЯрд╛/рдХреЛрдб рд╕рдВрджрд░реНрдн рд╣реЛрдЧрд╛ред рдЬрдм cshtml рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдмрд╛рдЙрдВрдб C# рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдб рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рд╕рдВрднрд╡рддрдГ рдмрдбрд╝реЗ рдШрдЯрдХ рдХреЗ рд╕рдорд╛рди рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рддреЛ рдХреНрдпрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбрд╛рдпрдиреЗрдорд┐рдХ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА? рдпрд╛ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдкрд╛рд╕ рд╕рдЦреНрдд рд▓рдХреНрд╖реНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рддрд╛рдХрд┐ рдкрд╛рд░реНрд╕рд░ рдЬрд╛рдирддрд╛ рд╣реЛ рдХрд┐ рдбреЗрдЯрд╛ рдмрд╛рдзреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП?

рдЙрд╕ рдиреЛрдЯ рдкрд░, рдЧрддрд┐рд╢реАрд▓ рдбреЗрдЯрд╛ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрд╕ рд╕рдордп рдЗрд╕реЗ рд░реЛрдХрдиреЗ рд╡рд╛рд▓рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдпрджрд┐ рд╕реА # рдпрд╛ рдЖрдИрдПрд▓ рд╣рд╡рд╛рдУрдВ рдХреЛ рдореЛрдиреЛ рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╡рд╛рд╕рдо рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

@AlekseyMartynov рдЬреЛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реИ

рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ Xamzor рдореЗрдВ рдореИрдВрдиреЗ рдХреБрдЫ рд╕реАрдорд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯрд┐рдВрдЧ рд╕рдорд░реНрдерди рдЗрд╕ рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ:

<ListView ItemTemplate="typeof(MyCustomTemplate)" ... />

рдЬрд╣рд╛рдВ MyCustomTemplate рдПрдХ рд╕рдВрдкрддреНрддрд┐ "DataContext" рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ Blazor рдШрдЯрдХ рд╣реИ рдЬрд┐рд╕реЗ ListView рджреНрд╡рд╛рд░рд╛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдПрдХ рдЕрд▓рдЧ рдШрдЯрдХ рдХреЗ рдмрдЬрд╛рдп рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЗрдирд▓рд╛рдЗрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЫреЛрдЯреЗ рдФрд░ рд╕рд░рд▓ рд╣реИрдВред

рд╢рд╛рдпрдж ember.js рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдШрдЯрдХ рдХреБрдЫ рдкреНрд░реЗрд░рдгрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://www.mutuallyhuman.com/blog/2016/09/23/creating-an-accordion-with-contextual-components-in-ember

@SvenEV рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╕рд░рд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдорджрджрдЧрд╛рд░ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдВрдкреЛрдиреЗрдВрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИ :)

рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рддреАрди рдЪреАрдЬреЗрдВ:

  1. рдШрдЯрдХреЛрдВ рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╢реНрд░реЗрдгреАрдмрджреНрдз рдмрдирд╛рдПрдВ (рдЙрджрд╛. рдкреЗрд░реЗрдВрдЯрдХрдВрдкреЛрдиреЗрдВрдЯ рдЯрд╛рдЗрдк рдкреНрд░реЙрдкрд░реНрдЯреА; рддрд╛рдХрд┐ рдЖрдк MyTableComponent -> MyRowComponent -> MyColumnComponent) рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХреЗрдВред рдпрджрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯ рдЯрд╛рдЗрдк рд╢реВрдиреНрдп рд╣реИ, рддреЛ рдШрдЯрдХ рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдмрдЪреНрдЪрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛ред MyTableComponent.ParentComponentType рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдШрдЯрдХреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ:

```рд╕реА#
// MyRowComponent рдореЗрдВ
рдкреЗрд░реЗрдВрдЯрдХрдВрдкреЛрдиреЗрдВрдЯ рдЯрд╛рдЗрдк рдЯрд╛рдЗрдк рдХрд░реЗрдВ {рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ; } = рдЯрд╛рдЗрдкрдСрдлрд╝ (MyTableComponent);
...

// In MyColumnComponent
Type ParentComponentType {get; } = typeof(MyRowComponent); 
...
Thus, MyColumnComponent can only be created within a MyRowComponent, and MyRowComponent can only be created within a MyTableComponent.

2. Allow components to be extended via ITemplateable interface. When the ITemplateable.Template [Tag] property is valued, it overrides the component's default rendering. Internally, it's something like:

```C#
    if (component is ITemplateable)
    {
        if (component.Template != null)
        {
            тАж return template rendering ...
        }
    }
    тАж return default rendering ...
  1. рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ ITemplate рдмрдирд╛рдПрдВ рдЬрд┐рд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ BlazorTemplate рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рдлрд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдирдореВрдирд╛ рдЙрдкрдпреЛрдЧ рдЬрд╣рд╛рдВ MyColumnComponent ITemplateable рд╣реИ:

    <MyTableComponent>  
        <MyRowComponent>  
            <MyColumnComponent>  
                <Template>  
                    тАж  template codes here; can contain a call to another component ...
                </Template>  
            </MyColumnComponent>  
        </MyRowComponent>  
    </MyTableComponent>  

MyColumnComponent рдХреЗ рд╕рд╛рде ITemplateable рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ <Template> тАж </Template> рдЯреИрдЧ рдпреБрдХреНрдд рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЯреИрдЧ рдХреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ MyColumnComponent рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреА рд╣реИрдВред

рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, MyColumnComponent рд╡рд┐рд╢реЗрд╖ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ, рдШрдЯрдирд╛рдУрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП BlazorTemplate рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ/рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рд╕рдВрдкрддреНрддрд┐ рддрддреНрд╡ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдорддрджрд╛рди рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

<Button>
  <Button.ContextMenu>
    <ContextMenu>
      <MenuItem Header="1">First item</MenuItem>
      <MenuItem Header="2">Second item</MenuItem>
    </ContextMenu>
  </Button.ContextMenu>

  Right-click me!
</Button>

рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ

<Button ContextMenu=@GetContextMenuRenderFragment()>
  Right-click me!
</Button>

рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╡реЗрдм рд╢реБрджреНрдзрддрд╛рд╡рд╛рджреА рдЗрд╕ рдкрд░ рдЕрдкрдиреА рдирд╛рдХ рдирд╣реАрдВ рдореЛрдбрд╝реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ XAML рдХреА рддрд░рд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ?

рдирд╣реАрдВ, рд╡реЗ рдареАрдХ рд░рд╣реЗрдВрдЧреЗ, property element syntax html attribute syntax (рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ) рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдШрдЯрдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдпреВрдЖрдИ рдирд┐рдпрдВрддреНрд░рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреЗрд╡)

рдореБрдЭреЗ рдпрд╣ рднреА рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдмрдЪреНрдЪрд╛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯрд┐рдВрдЧ рдкрд░ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдпрд╣ рднреЗрдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдХрд┐ рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдХреЗ рдмрдЬрд╛рдп рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рдбреЗрдЯрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИ рдореВрд▓ рдШрдЯрдХред

рдЗрд╕ рдХрджрд░:

<List>
    <List.DataTemplate>
      <!-- Template Here -->
    </List.DataTemplate>
    <ComponentWithNoRelationToTheList />
</List>

рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рдЪрд╛рд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ DataTemplate рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рдПрдХ рдХрд╕реНрдЯрдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реВрдЪреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдПрдХреНрд╕рдПрдПрдордПрд▓ рдХреА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ "рдЯреЗрдореНрдкрд▓реЗрдЯ" рдХрд┐рд╕реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмреНрд▓реЗрдЬрд╝рд░ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд░рдХреНрд╖рд┐рдд/рд╡рд┐рд╢реЗрд╖ рдХреАрд╡рд░реНрдб рд╣реИ? рдЬрдм рдПрдХ рдЯреИрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдирд╛рдорд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рддреЛ, рдЖрдЗрдП рдПрдХ рдШрдЯрдХ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬреИрд╕реЗ:

ComponentTemplateTest.cshtml

<strong i="7">@functions</strong>
{
  [Parameter]
  public RenderFragment Template { get; set; }

  [Parameter]
  public RenderFragment<int> TemplateWithInt { get; set; }

  [Parameter]
  public RenderFragment<TestObject> TemplateWithObject { get; set; }

  public class TestObject
  {
      public string PropString { get; set; }
      public int PropInt { get; set; }
  }

  private TestObject testobject = new TestObject();
}

<div>
    <div><button onclick="@((x) => this.testobject.PropInt++)">test</button></div>
    <div>@Template</div>
    <div>@((RenderFragment)(x => TemplateWithInt(x, testobject.PropInt)))</div>
    <div>@((RenderFragment)(x => TemplateWithObject(x, testobject)))</div>
</div>

рд╣рдо рдЗрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

<ComponentTemplateTest>
    <Template>
        test simple template
    </Template>

    <TemplateWithInt params="param1">
        <strong i="11">@param1</strong>
    </TemplateWithInt>

    <TemplateWithObject params="paramObject">
        @paramObject.PropInt
    </TemplateWithObject>
</ComponentTemplateTest>

рд╣рдореЗрдВ params рдЬреИрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмреНрд▓реЗрдЬрд╝рд░ рдХреЛрдб рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрддрд╛ рд╣реИ

            builder.OpenComponent<StandaloneApp.ComponentTemplateTest>(16);
            builder.AddAttribute(17, "template", (Microsoft.AspNetCore.Blazor.RenderFragment)((builder2) => {
                builder2.AddContent(18, "\n        test simple template\n    ");
            }
            ));
            builder.AddAttribute(19, "templatewithint", (Microsoft.AspNetCore.Blazor.RenderFragment<System.Int32>)((builder2, param1) => {
                builder2.AddContent(20, param1);
            }
            ));
            builder.AddAttribute(21, "templatewithobject", (Microsoft.AspNetCore.Blazor.RenderFragment<StandaloneApp.ComponentTemplateTest.TestObject>)((builder2, paramObject) => {
                builder2.AddContent(22, "\n        ");
                builder2.AddContent(23, paramObject.PropInt);
                builder2.AddContent(24, "\n    ");
            }
            ));
            builder.CloseComponent();

рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛? рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ?

@uazo рдмрд╕ рдзреНрдпрд╛рди рджреЗрдВ, рд╕рдВрдкрддреНрддрд┐ рддрддреНрд╡ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд┐рдирд╛ property рдФрд░ component рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред

@danieldegtyarev рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ ... рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдЕрднреА рдХреЗ рд▓рд┐рдП рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ ...

https://github.com/uazo/Blazor/tree/dev-experimental-template-component рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ
рдЖрдкрдХреЛ рдЙрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...

рдЯреИрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд "рдЯреЗрдореНрдкрд▓реЗрдЯ" рдШреЛрд╖рдгрд╛рддреНрдордХ рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЗрдирд▓рд╛рдЗрди рд╣реИ:

<MyCom MyComProp="MyComPropValue">
    <Template>
        Components, @MyCom.MyComProp, HTML, content and <strong i="6">@values</strong>
    </Template>
</MyCom>

"рдЯреЗрдореНрдкрд▓реЗрдЯ" рдХреЛ "рдирд╛рдорд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ" рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреИрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, рдирд╛рдорд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдореВрд▓ рдШрдЯрдХ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдЧреА, рддрд╛рдХрд┐ MyCom.MyComProp рдЬреИрд╕рд╛ рдХреБрдЫ рднреА рд╕рдВрднрд╡ рд╣реЛ:

<MyCom MyComProp="MyComPropValue">
    <Template Name="MyTemplate {Content: @content; Values: @values}" />
</MyCom>

"рдЯреЗрдореНрдкрд▓реЗрдЯ" рдХрд╛ рдЙрдкрдпреЛрдЧ "рдирд╛рдорд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ" рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, рдирд╛рдорд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдореВрд▓ рдШрдЯрдХ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдЧреА, рддрд╛рдХрд┐ MyCom.MyComProp рдЬреИрд╕рд╛ рдХреБрдЫ рднреА рд╕рдВрднрд╡ рд╣реЛ:

<MyCom 
    MyComProp="MyComPropValue"
    Template="MyTemplate {Content: @content; Values: @values}" />

рдЯреИрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ "рдЯреЗрдореНрдкрд▓реЗрдЯ" рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдорд╛рди рд╕рдВрдХрд▓рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рдШрдЯрдХ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдЧрд╛, рдЬреЛ рдХрд┐ рдШрдЯрдХ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реЗрдВрдбрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИред

рдПрдХ "рдирд╛рдорд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ" рдПрдХ рдкреБрди: рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИред "рдирд╛рдорд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ" рдмрдирд╛рдирд╛ рд▓рдЧрднрдЧ рдПрдХ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдЬреИрд╕рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрдбрд╝рд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдирд╛рдорд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ "рдЯреЗрдореНрдкрд▓реЗрдЯ" рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдХ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдШрдЯрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдирдВрдд рд▓реВрдк рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдШрдЯрдХ рдЬреЛ рдПрдХ рд╣реА рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЙрд╕реЗ рдХреЛрдбрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ... рдбрд┐рдЬрд╝рд╛рдЗрди/рд╕рдВрдХрд▓рди-рд╕рдордп рддреНрд░реБрдЯрд┐ рд╢рд╛рдпрдж?

рдкреНрд░рд╢реНрди: рдХреНрдпрд╛ рдПрдХ рдирд╛рдорд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд┐рд╕реА рдЕрдиреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдХрд┐рд╕реА рдирд╛рдорд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХ рдкреНрд░рдХрд╛рд░ (рдкреНрд░рдХрд╛рд░реЛрдВ) рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдЬрд┐рддрдирд╛ рд╣реЛ рд╕рдХреЗ рдПрдЪрдЯреАрдПрдордПрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдирдИ рдЪреАрдЬреЗрдВ рдкреЗрд╢ рди рдХрд░реЗрдВред рдХреЛрдИ Xamarin xaml рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдпрд╛ рдмрджрд╕реВрд░рдд рдПрдПрд╕рдкреАрдиреЗрдЯ рд╡реЗрдмрдлреЙрд░реНрдо рдШрдЯрдХ рдирд╣реАрдВ (рдПрдПрд╕рдкреА рдкреБрдирд░рд╛рд╡рд░реНрддрдХ рдФрд░ рдЗрд╕реА рддрд░рд╣)ред
рдореИрдВ рдПрдПрд╕рдкреАрдПрдирдЯреА рдПрдорд╡реАрд╕реА рджреБрдирд┐рдпрд╛ рд╕реЗ рд╣реВрдВ, рдореБрдЭреЗ рдЦреБрд╢реА рдФрд░ рдЖрдЬрд╛рджреА рдпрд╛рдж рд╣реИ рдЬрдм рдореИрдВрдиреЗ "рдПрдПрд╕рдкреАрдиреЗрдЯ рд╡реЗрдмрдлреЙрд░реНрдо" рд╕реЗ "рдПрдПрд╕рдкреАрдПрдирдЯреА рдПрдорд╡реАрд╕реА" рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛, рдПрдПрд╕рдкреА рдЬреИрд╕реЗ рдХреЛрдИ рдФрд░ рдЕрдЬреАрдм рдШрдЯрдХ рдирд╣реАрдВ
рдХреГрдкрдпрд╛, рдмреНрд▓реЗрдЬрд╝рд░ рдХреЛ рдПрдХ рдирдпрд╛ "рдПрдПрд╕рдкреАрдиреЗрдЯ рд╡реЗрдмрдлреЙрд░реНрдо" рди рдмрдирдиреЗ рджреЗрдВред

рдореИрдВ @GoranHalvarsson рд╕реЗ рд╕рд╣рдордд , рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рд╛рде (рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг @etmendz рдкреЛрд╕реНрдЯ рдореЗрдВ)ред

рдЙрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдиреА рд╢рд╛рдЦрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рд╣реИ, рдЕрдм рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ (рдкреИрд░рд╛ рдФрд░ рдЕрдиреБрдордд рдмрдЪреНрдЪреЗ) рдореЗрдВ рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рдеред

рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдХреБрдЫ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИ?

@GoranHalvarsson рдореИрдВ рд╕рд╣рдордд рд╣реВрдБред рдПрдорд╡реАрдкреА рдмреНрд▓реЗрдЬрд╝рд░ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдЕрд░реНрде рдореЗрдВ, рдПрдХ "рдЯреЗрдореНрдкрд▓реЗрдЯ" рдореЗрдВ HTML, рдШрдЯрдХ, рд╕рд╛рдордЧреНрд░реА рдФрд░ рд░реЗрдЬрд░ рдХреЛрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рд░реВрдк рдореЗрдВ, Blazor рдШрдЯрдХ+рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЕрднреА рднреА рдкрд╣рдЪрд╛рдирдиреЗ рдпреЛрдЧреНрдп HTML+Razor рдХреЛрдб рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдШреЛрд╖рдгрд╛рддреНрдордХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЗрд╕ рдмрд┐рд▓ рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП <Template> рдпрд╛ @template рдХреАрд╡рд░реНрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреА рд╡рд╕реНрддреБ рдмреНрд▓реЗрдЬрд╝рд░ рдХреА рдПрдкреАрдЖрдИ/рдПрдХреНрд╕рдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдШрдЯрдХ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреЗ рдмреНрд░рд╛рдВрдб рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддреА рд╣реИ - рдЙрджрд╛рд╣рд░рдг: рдПрдЪрдЯреАрдПрдордПрд▓ рд╣реЗрд▓реНрдкрд░-рдЬреИрд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ (рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдЯреЗрд▓реАрд░рд┐рдХ/рдХреЗрдВрдбреЛ рдпреВрдЖрдИ) рдпрд╛ рдЬрд╝реИрдорд░рд┐рди/рдПрдХреНрд╕рдПрдПрдордПрд▓-рдЬреИрд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ (ooui.wasm, Platform .Uno) рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рддреГрддреАрдп рдкрдХреНрд╖/рд╡рд┐рдХреНрд░реЗрддрд╛-рд╕реНрддрд░ рдХреА рдбрд┐рд▓реАрд╡рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИред Blazor рдХреЗ рднреАрддрд░, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореБрджреНрджреЛрдВ/рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ/рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдХ рдирд┐рд░реНрдорд╛рддрд╛ рднрд╛рдЧреАрджрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдордпреЛрдЧреНрдпрддрд╛ рдФрд░ рд╕рдВрдХрд▓рди рд▓рдЪреАрд▓реЗрдкрди рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдПрдХ рд╕реБрдЭрд╛рд╡ рд╣реИред рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдпрд╛ "рдирд╛рдорд┐рдд рдЯреЗрдореНрдкреНрд▓реЗрдЯ" рдХреЛрдб рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореВрд▓реНрдп рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрджрд┐ рдпрд╣ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдШрдЯрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? ;-)

@uazo IMHO, рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, <Template> рдХрд░рдирд╛ <Template> рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ рд╕реАрдзреЗ рдкреИрд░рд╛рдореАрдЯрд░/рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░рдХреГрддрд┐ рдХреЛ рд╣рд░рд╛рдиреЗ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдПрдХрд╛рдзрд┐рдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЧреБрдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕рдВрджреЗрд╣ рд╣реИред рдЗрд╕ рдорд╛рдпрдиреЗ рдореЗрдВ, рдЗрд╕реЗ рдмрд╣реБрдд рдлреНрд░реАрд╕реНрдЯрд╛рдЗрд▓ рдмрдирд╛рдирд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмреНрд▓реЗрдЬрд╝рд░ рдХреЗ рдкрд╛рд╕ рдШрдЯрдХ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рдорд╛рдирдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╢рд╛рдпрдж ITemplate рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдФрд░ рдХреБрдЫ рдХрдВрдкрд╛рдЗрд▓рд░ рдпрд╣рд╛рдВ рдФрд░ рд╡рд╣рд╛рдВ рдЯреНрд╡реАрдХ рдХрд░рддреЗ рд╣реИрдВред

@SteveSandersonMS https://github.com/aspnet/Blazor/issues/404#issuecomment -377229910 рдХреЗ рд▓рд┐рдП
aspnet/AspNetCore#15829 рдХреЛрдб рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛

MyListWithHeader.cshtml

<strong i="10">@functions</strong>
{
    [Parameter]
    public RenderFragment Title { get; set; }

// NOT MANDATORY
    [Parameter]
    public RenderFragment ChildContent { get; set; }
// *******************

    [Parameter]
    public IEnumerable<example.Person> RowItems { get; set; }

    [Parameter]
    public RenderFragment<example.Person> RowTemplate { get; set; }
}

<div>
    <strong i="11">@Title</strong>
</div>

<strong i="12">@foreach</strong> (var item in RowItems)
{
    <div>
    @RowTemplate.Render(item)
    </div>
}

<strong i="13">@ChildContent</strong>

example.cshtml

<strong i="17">@page</strong> "/component-test"

<MyListWithHeader RowItems=@People>
    <MyListWithHeader.Title>
        Here I'm still in the outer context so can reference properties on the component itself
        such as <strong i="18">@TitleText</strong>
    </MyListWithHeader.Title>

    <MyListWithHeader.RowTemplate WithParams="item">
        <!-- Somehow need intellisense to know that RowTemplate is meaningful here, and that its "item" value is taken from the generic type arg on the RowItems property -->
        Here I'm in the context of an Action RenderTreeBuilder, Person
        because we supplied
        an IEnumerable Person as the value for RowItems, so I can write <b>@item.FirstName</b>
    </MyListWithHeader.RowTemplate>
</MyListWithHeader>

<strong i="19">@functions</strong>
{
  string TitleText { get; set; }
  IEnumerable<Person> People { get; set; }

  protected override void OnInit()
  {
      var people = new List<Person>();
      people.Add(new Person { FirstName = "uno" });
      people.Add(new Person { FirstName = "due" });
      people.Add(new Person { FirstName = "tre" });

      this.People = people;
  }

  public class Person
  {
      public string FirstName { get; set; }
  }
}

рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде!

@uazo рдмрд╣реБрдд рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛! рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рд╣реИ: WithParams="item" рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ 'рд╕рдВрджрд░реНрдн' рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ @item рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдЙрд╣рдо .. рд▓реЗрдХрд┐рди рдЕрдЧрд░ item рдШрдЯрдХ example рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ?
рдЪреВрдВрдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ 'рд╕рдВрджрд░реНрдн' рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрд░ рдирд╛рдо рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП WithParams , рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЪрд░ рдХрд╛ рдирд╛рдо рддрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдЖрдк рдПрдХ рд╡рд╛рдпрд░реНрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╛рдо (рдЬреИрд╕реЗ ChildContent ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ, рд╡реИрдХрд▓реНрдкрд┐рдХ WithParams рд╕рд╛рде рдпрд╛ рдмрд┐рдирд╛? рдпрд╛ <MyListWithHeader.RowTemplate WithParams=@item> рдЬреИрд╕реЗ рд╕рд┐рдВрдЯреЗрдХреНрд╕?

рдкреАрдЫреЗ рдореБрдбрд╝рдХрд░ рджреЗрдЦреЗрдВ, рддреЛ рдиреЗрд╕реНрдЯреЗрдб рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╛рдо рдареАрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛...

рдЪрд▓реЛ рд╕реЛрдЪрддреЗ рд╣реИред рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХреЛрдб рдЬрдирд░реЗрд╢рди рд╣реИред рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдЗрд╕ рдЖрдЗрдЯрдо рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рддреЛ рдЕрдЧрд░ рд╣рдо рдПрдХ рдЪрд░ item 'рдЖрд░рдХреНрд╖рд┐рдд' рдХрд░рддреЗ рд╣реИрдВ - рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдФрд░ рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдиреЗрд╕реНрдЯреЗрдб рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЕрдкрдирд╛ рджрд╛рдпрд░рд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ @item рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрднреА рднреА рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред

BTW, рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ- scope рдХреЗ рдкрд╛рд╕ рдЕрдкрдирд╛ @functions рдмреНрд▓реЙрдХ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдЪрд▓реЛ рдХрд░рддреЗ рд╣реИ

<MyListWithHeader RowItems=@People>
    <MyListWithHeader.Title>
        ...<strong i="6">@TitleText</strong>
    </MyListWithHeader.Title>

    <MyListWithHeader.RowTemplate WithParams="item">
        ... <b>@item.FirstName</b>

        <MyListWithHeader>
            <MyListWithHeader.RowTemplate WithParams="item">
                @item.FirstName
            </MyListWithHeader.RowTemplate>
        </MyListWithHeader>

    </MyListWithHeader.RowTemplate>
</MyListWithHeader>

рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рд╣реЛрдЧрд╛

protected override void BuildRenderTree(Microsoft.AspNetCore.Blazor.RenderTree.RenderTreeBuilder builder)
{
    base.BuildRenderTree(builder);
    builder.OpenComponent<StandaloneApp.Pages.testtemplated.MyListWithHeader>(0);
    builder.AddAttribute(1, "RowItems", Microsoft.AspNetCore.Blazor.Components.RuntimeHelpers.TypeCheck<System.Collections.Generic.IEnumerable<StandaloneApp.Pages.testtemplated.example.Person>>(People));
    builder.AddAttribute(2, "Title", (Microsoft.AspNetCore.Blazor.RenderFragment)((builder2) => {
        builder2.AddContent(3, "\n        Here I\'m still in the outer context so can reference properties on the component itself\n        such as ");
        builder2.AddContent(4, TitleText);
        builder2.AddContent(5, "\n    ");
    }
    ));
    builder.AddAttribute(6, "RowTemplate", (Microsoft.AspNetCore.Blazor.RenderFragment<StandaloneApp.Pages.testtemplated.example.Person>)((builder2, item) => {
        builder2.AddContent(7, "\n        ");
        builder2.AddContent(8, "\n        Here I\'m in the context of an Action RenderTreeBuilder, Person\n        because we supplied\n        an IEnumerable Person as the value for RowItems, so I can write ");
        builder2.OpenElement(9, "b");
        builder2.AddContent(10, item.FirstName);
        builder2.CloseElement();
        builder2.AddContent(11, "\n\n        ");
        builder2.OpenComponent<StandaloneApp.Pages.testtemplated.MyListWithHeader>(12);
// line 43
        builder2.AddAttribute(13, "RowTemplate", (Microsoft.AspNetCore.Blazor.RenderFragment<StandaloneApp.Pages.testtemplated.example.Person>)((builder3, item) => {
            builder3.AddContent(14, "\n                ");
            builder3.AddContent(15, item.FirstName);
            builder3.AddContent(16, "\n            ");
        }
        ));
        builder2.CloseComponent();
        builder2.AddContent(17, "\n\n    ");
    }
    ));
    builder.CloseComponent();
}

рд╕рд╛рде

Error   CS0136  A local or parameter named 'item' cannot be declared in this scope because that name is used in an enclosing local scope to define a local or parameter

StandaloneApp\obj\Debug\netstandard2.0\Pages\testtemplated\example.g.cs line 43

рд╣рд╛рдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреЛрдбрдЬреЗрди рдХреЗ рджреМрд░рд╛рди рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд▓реЗрдХрд┐рди ... рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ component рдХреЗ рдмрдЬрд╛рдп (рд╕рдВрднрд╡рддрдГ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдШрдЯрдХ) RenderFragment рд╣рдо рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде StateHasChanged рдЖрд╣реНрд╡рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ () рдЬрдм @item.FirstName рдмрджрд▓рддрд╛ рд░рд╣рддрд╛ рд╣реИред

рд╣рд╛рдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреЛрдбрдЬреЗрди рдХреЗ рджреМрд░рд╛рди рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИред
рдХреЛрдбрдЬрди рдХреЗ рджреМрд░рд╛рди (рдЬреЛ рдХрд┐ рд░реЗрдЬрд╝рд░ рд╕рдВрд╢реЛрдзрд┐рдд рд╣реИ) рд╕рднреА рдиреЛрдбреНрд╕ рдкрд╛рд░ рд╣реЛ рдЧрдП рд╣реИрдВ, рдХреБрдЫ рдПрдЪрдЯреАрдПрдордПрд▓ рд╣реИрдВ, рдЕрдиреНрдп рд╕реА # рдиреЛрдб рд╣реИрдВ: рд╕реА # рд╡рд╛рд▓реЗ рд▓реЛрдЧ рдЧрд▓рдд рд╣реЛрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдЪрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХрд╛рд░ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рдФрд░ рд╣рдореЗрдВ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЪрд░ T рдХрд╛ RenderFragment<T> , рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ T ) ... рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрд░ рдХрд╛ рдирд╛рдо рдХреНрдпрд╛ рд╣реИред
рдЖрдк рд╢рд╛рдпрдж рдЙрд╕ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд░ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЧрдбрд╝рдмрдбрд╝ рд▓рдЧрддрд╛ рд╣реИ

рд▓реЗрдХрд┐рди... рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд░реЗрдВрдбрд░рдлреНрд░реИрдЧрдореЗрдВрдЯ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдШрдЯрдХ (рд╕рдВрднрд╡рддрдГ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдШрдЯрдХ) рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП StateHasChanged() рдЬрдм @item.FirstName рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдирд╛ рдЬрд░реВрд░реА рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдШрдЯрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ BlazorComponent , рдпрджрд┐ рдЖрдкрдХреЛ "рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдВрдкрддреНрддрд┐" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ RenderFragment<T>
рдЖрдЦрд┐рд░рдХрд╛рд░, RenderFragment рдХреЗ рд▓рд┐рдП StateHasChanged() рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдШрдЯрдХ рдХреЗ StateHasChanged() рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

рдпрд╣рд╛рдБ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рддрдЪреАрдд рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди -

рдХреНрдпрд╛ рдЗрд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрджрд░реНрдн рдЕрд╡рдзрд╛рд░рдгрд╛ рдЬреИрд╕реЗ рдбрдмреНрд▓реНрдпреВрдкреАрдПрдл/рдпреВрдбрдмреНрд▓реНрдпреВрдкреА рдХреЗ рд╕рд╛рде рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдлрд┐рд░ рдЕрдкрдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЖрдк рд╣рдореЗрд╢рд╛ this.DataContext.[Member] рд╕рдВрджрд░реНрдн рджреЗрдВрдЧреЗред

@ рдкреАрдЯрд░0302 рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ ...

рдЪреБрдиреМрддреА рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред рдмреЗрд╢рдХ рдЗрд╕реЗ рдПрдХреНрд╕рдПрдПрдордПрд▓ рдореЗрдВ рд░рди рдЯрд╛рдЗрдо рдкрд░ рдмрд╛рдзреНрдпрдХрд╛рд░реА рджреНрд╡рд╛рд░рд╛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдбреЗрдЯрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд╢рд╛рдпрдж рдЬреЗрдирд░рд┐рдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдпреЛрдЧреНрдпред

рддреЛ рдлрд┐рд░ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд░рдирдЯрд╛рдЗрдо рдмрд╛рдзреНрдпрдХрд╛рд░реА рддрдВрддреНрд░ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВред

рдЖрдк рдХрд┐рд╕реА рднреА рддрд░рд╣ рдШреЛрд╖рдгрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХреНрд╕рдПрдПрдордПрд▓ рдкрд░ рдХреБрдЫ рд╣рдж рддрдХ x:DataType рд╕рдорд╛рди, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЖрджрд░реНрд╢ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдХрдо рдкреНрд░рд╡рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@uazo рдореЗрд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рдпрд╣рд╛рдБ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ ...

рез) рдпрд╣ рдХрд┐ RenderFragment рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЯреИрдЧ рдореЗрдВ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдпреЛрдЧреНрдп рдирд╛рдо рдХреЗ рд╕рд╛рде рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреИрд╕реЗ <MyListWithHeader.Title /> рдореБрдЭреЗ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрд░реЗ рдкреВрд░реНрд╡ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреЛ рддреЛрдбрд╝ рджреЗрддреА рд╣реИ рдХрд┐ ParameterAttribute рд╡рд╛рд▓реЗ рдЧреБрдг рд╕реЗрдЯ рд╣реИрдВ html-рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрди рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╕реА # -рд╡рд┐рд╢реЗрд╖рддрд╛ рд░рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ? [ContentParameter] ?

2) рдпрд╣ рдХрд┐ RenderFragment<Person> рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ
<MyListWithHeader.RowTemplate WithParams="item" /> рдкрд╣рд▓реЗ рддреЛ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрд╛ред рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реИ рдХрд┐ рдЙрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬрдирд░реЗрд╢рди рд▓реЛрдХрд▓ рдХреЗ рджреМрд░рд╛рди рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдореЗрдВ рдХрд┐рд╕ рдЪрд░ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдпрд╣рд╛рдВ рдлрд┐рд░ рд╕реЗ рдЕрдВрддрд░ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реВрдВ рдХрд┐ рдЯреВрд▓рд┐рдВрдЧ рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрд┐рддрдирд╛ рд░рдЪрдирд╛рддреНрдордХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред <MyListWithHeader.RowTemplate params(item) /> рд╢рд╛рдпрдж?

3) рдЕрдЧрд░ рдореИрдВ <MyListWithHeader RowItems=<strong i="16">@PeopleOnline</strong> /> рдФрд░ <MyListWithHeader RowItems=<strong i="18">@PeopleOffline</strong> /> рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдХреНрдпрд╛ рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ? рдХреНрдпрд╛ рдЙрдирдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рд╢рд╛рдпрдж рдЗрд╕ рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреБрдЫ рдореЙрдбрд▓-рд╕рдВрдЪрд╛рд▓рд┐рдд рдкреНрд░рд╛рд░рдВрднрд┐рдХрд░рдг, рд╕рдВрдкрд╛рджрдХ рдХреЗ рд╕рдорд╛рди рд╣реА рд╕рдорд╛рди рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдкрддреНрддрд┐-рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рдеред

рдЬрдм рдореИрдВ рдврд╛рдВрдЪреЗ рдореЗрдВ рдирдпрд╛ рд╣реВрдВ рддреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЬреЛрдЦрд┐рдо рднрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рдитАж

рдпрджрд┐ рдЖрдк рдКрдкрд░ рджрд┐рдП рдЧрдП рдмрд┐рдВрджреБ 1 рдХреЗ рддрд╣рдд рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреВрд▓рд┐рдпрди рдзреНрд╡рдЬ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рддреНрдп) рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди (рдпрджрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рдЖрдк рдКрдкрд░ рджрд┐рдП рдЧрдП рдмрд┐рдВрджреБ 3 рдХреЛ IDefaultTemplateProvider рдЬреИрд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЛрдИ рднреА рдЯреЗрдореНрдкреНрд▓реЗрдЯ-рдкреНрд░реЙрдкрд░реНрдЯреА-рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрд╕реА рддрд░рд╣ рдЦреЛрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЖрдк рдЖрдИрдХрдВрдкреЛрдиреЗрдВрдЯ (рдУрдВ) рдХреЛ рдЦреЛрдЬрддреЗ рд╣реИрдВ рдФрд░ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ-рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдзреНрд╡рдЬ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдкреНрд░реЙрдкрд░реНрдЯреА рдЯреИрдЧ рдХрдИ рдмрд╛рд░ рдорд┐рд▓рддрд╛ рд╣реИ рддреЛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдВред рдЗрд╕ рддрд░рд╣ рдЖрдк рдХрд┐рд╕реА рдРрдк рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╛рдорд╛рдиреНрдп рдШрдЯрдХ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрдИ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдбрд┐рдЬрд╝рд╛рдЗрди-рд╕рдордп рдкрд░ рд╕рдВрдХрд▓реНрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рд╢рд╛рдпрдж?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдореЗрд░реЗ рд╕реАрдЦрдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдПрдХ рдЕрдЪреНрдЫреА рдкреГрд╖реНрдарднреВрдорд┐ рдорд┐рд▓рддреА рд╣реИтАж, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВтАж

рдореИрдВ рд╕реНрдерд┐рд░ рдЕрдиреБрд╡рд╛рджрд┐рдд рдкрд╛рда, рд╕рддреНрдпрд╛рдкрди рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рд▓рд┐рдП рдореЗрдЯрд╛-рдбреЗрдЯрд╛ рдФрд░ рд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШрдЯрдХреЛрдВ рдХрд╛ рдореЙрдбрд▓-рд╕рдВрдЪрд╛рд▓рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯрд┐рдВрдЧ рдХрд╛ рдпрд╣ рддрдВрддреНрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЪреАрдЬ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ public interface IRenderFragment<T> { RenderFragment UsingDataItem(T item); } рдмрдирд╛рдпрд╛ рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдШрдЯрдХ рдмрдирд╛рдпрд╛ рдЬреЛ рдЙрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдЗрд╕ рддрд░рд╣ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдШрдЯрдХ рдмрдирд╛рдпрд╛

  <InputField For=@DataSource(Model, x => x.NewTodo) Template="@InputBasic.Template" />

рддреЛ, рдЗрд╕ рддрд░рд╣ рд╕реЗ InputField рдШрдЯрдХ рдореЗрдВ рдореЗрдЯрд╛-рдбреЗрдЯрд╛ рдЖрджрд┐ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рдореЗрдВ рдлреАрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпреЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдПрдХреНрд╕рдПрдПрдордПрд▓ рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрдВрддреНрд░ рд╣реИ рдЬрдм рдХрд┐рд╕реА рдШрдЯрдХ рдореЗрдВ рдЖрд╕рдкрд╛рд╕ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рд╕реВрдЪреА-рджреГрд╢реНрдп рдореЗрдВ рдЖрдкрдХреЛ рдПрдХ рдЖрдЗрдЯрдо-рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред Blazor рдореЗрдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрд╕ рдЖрд╕рдкрд╛рд╕ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рд▓реВрдк рдХреЗ рд╕рд╛рде рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддрдм рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдБ рднреА рдРрд╕рд╛ рд╣реА рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреЛрдб рдореЗрдВ рдореЗрдЯрд╛-рдбреЗрдЯрд╛ рд╕реЗ рдПрдХ рдореЙрдбрд▓ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдФрд░ рдЙрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдШрдЯрдХ рдореЗрдВ рдлрд╝реАрдб рдХрд░ рд╕рдХрддрд╛ рдерд╛ред @{ var inputModel = InputModelHelper.GetFor(ViewModel, x => x.NewTodo); } <InputBasic DataItem="@inputModel"/>

рд╢рд╛рдпрдж рдХреБрдЫ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ ... рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдореБрдЭрд╕реЗ рд╕рд╡рд╛рд▓ рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореМрдЬреВрджрд╛ рддрддреНрд╡реЛрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рддрд░реНрдЬ рдкрд░ рдЕрдзрд┐рдХ рд╣реЛ? рдФрд░ рд╢рд╛рдпрдж рдПрдХ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдРрд╕рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреИрд╕реЗ:

  <label For=тАЭ@DataSource(Model, x => x.NewTodo)тАЭ></label>
  <input For=тАЭ@DataSource(Model, x => x.NewTodo)тАЭ />

рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рддрддреНрд╡ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдиреЛрдбреНрд╕ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдореИрдВрдиреЗ рдЦреБрд▓реЗ рдЯреИрдЧ <label>@For(x => x.NewTodo)</label> рдмрд╛рдж рдПрдХ рдлрд╝рдВрдХреНрд╢рди (рдЙрд╕ рд╕рд╛рдордЧреНрд░реА рдиреЛрдб рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрддрд╛ рд╣реИ) рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдиреЛрдбреНрд╕ (рдФрд░ рдПрдХ рд╕рд╛рдордЧреНрд░реА) рдЬреЛрдбрд╝рдХрд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ рд▓реЗрдмрд▓ рддрддреНрд╡ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдиреЛрдб) рдмрд┐рд▓реНрдбрд░ рдХреЛред (рдмрд┐рд▓реНрдбрд░ рдХреЛ BuildRenderTree рд╡рд┐рдзрд┐ рдореЗрдВ рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред) рдмрд┐рд▓реНрдбрд░ рдХреЗ рдкрд╛рд╕ рд▓реЗрдмрд▓ рдиреЛрдб рдХреА рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕рдХреЗ рдмрдлрд░ рдореЗрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХреА рдЧрдИ рд╣реИ рдФрд░ рдЗрд╕ рддрдВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрдирдкреБрдЯ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдпрд╣ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╢реВрдиреНрдп рддрддреНрд╡ рд╣реИ (рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рдмреВрдд рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдХреЛрдИ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдорд░реНрдерд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░реЗрдВрдбрд░ рдирд┐рд░рдВрддрд░рддрд╛/рд╡рд┐рд╕реНрддрд╛рд░ рд╕рдорд╛рд░реЛрд╣ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП ... рд╢рд╛рдпрдж "RenderElementExtensionHandler" рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдХрд┐рд╕реА рдШрдЯрдХ рдореЗрдВ рдРрд╕реА рд╕рдВрдкрддреНрддрд┐ рд╣реИ рддреЛ рдЙрд╕ рдкрд░ рдХреЙрд▓ рдХреЛ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реЛ рдФрд░ рдЙрди рддрддреНрд╡реЛрдВ рдкрд░ рдЬреЗрдирд░реЗрдЯ рдХреЛрдб рдореЗрдВ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрд╕реНрдЯрдо рд╣реЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ, рдЬреИрд╕реЗ For рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВред
рдХреНрдпрд╛ рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдпрд╣ рдПрдХ рдХрд┐рдирд╛рд░реЗ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ? рдХреНрдпрд╛ рдореМрдЬреВрджрд╛ рддрддреНрд╡реЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ?

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдЕрдЧрд░ рдпрд╣ рдереЛрдбрд╝рд╛ рд▓рдВрдмрд╛ рд╣реЛ рдЧрдпрд╛ тАж

рд╕рд╣рд╛рд░рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рджреЗрддреЗ?

<List RenderHeader={(text) => (<h4>{text}</h4>)}>
    {({ item, index }) => (
        <li value={index} class={item.Type}>
            {item.Content}
        </li>)}
</List>

рдХрд┐рдпрд╛ рд╣реБрдЖ:
b2c8b1aec98e65054c590d356fdf15e6a5e6a822
409026c2f41926d85d18ea2abf345453fa083e34
ce11f517d370b501433a62a56fbd4be1704000ad

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

guardrex picture guardrex  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

aurokk picture aurokk  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ipinak picture ipinak  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Kevenvz picture Kevenvz  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

TanvirArjel picture TanvirArjel  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ