summaryrefslogtreecommitdiff
path: root/docs/Xamarin.Forms.Core/Xamarin.Forms/DataTemplateSelector.xml
blob: 38ab9d6861d9896a4a2ffa73fb41c04a08a57aa3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<Type Name="DataTemplateSelector" FullName="Xamarin.Forms.DataTemplateSelector">
  <TypeSignature Language="C#" Value="public abstract class DataTemplateSelector : Xamarin.Forms.DataTemplate" />
  <TypeSignature Language="ILAsm" Value=".class public auto ansi abstract beforefieldinit DataTemplateSelector extends Xamarin.Forms.DataTemplate" />
  <AssemblyInfo>
    <AssemblyName>Xamarin.Forms.Core</AssemblyName>
    <AssemblyVersion>2.0.0.0</AssemblyVersion>
  </AssemblyInfo>
  <Base>
    <BaseTypeName>Xamarin.Forms.DataTemplate</BaseTypeName>
  </Base>
  <Interfaces />
  <Docs>
    <summary>Selects <see cref="T:Xamarin.Forms.DataTemplate" /> objects by data type and container.</summary>
    <remarks>
      <para>Application developers override the <see cref="M:Xamarin.Froms.DataTemplateSelector.OnSelectTemplate" /> method to return a unique <see cref="T:Xamarin.Forms.DataTemplate" /> for a data type and parent container combination. Additionally, because the same exact template instance must be returned for a given piece of data across successive calls to <see cref="M:Xamarin.Froms.DataTemplateSelector.SelectTemplate" />, developers should create and store these <see cref="T:Xamarin.Forms.DataTemplate" /> in their constructor overrides.</para>
      <block subset="none" type="note">Developers should note the following items:        <list type="bullet"><item><term>OnSelectTemplate must not return another DataTemplateSelector, and
        </term></item><item><term>The Android platform is limited to 20 templates per list view.</term></item></list></block>
      <example>The following example shows a basic use:
<code lang="c#"><![CDATA[class MyDataTemplateSelector : DataTemplateSelector
{
    public MyDataTemplateSelector ()
    {
        // Retain instances
        this.templateOne = new DataTemplate (typeof (ViewA));
        this.templateTwo = new DataTemplate (typeof (ViewB));
    }

    protected override DataTemplate OnSelectTemplate (object item, BindableObject container)
    {
        if (item is double)
            return this.templateOne;
        return this.templateTwo;
    }

    private readonly DataTemplate templateOne;
    private readonly DataTemplate templateTwo;
}]]></code></example>
    </remarks>
  </Docs>
  <Members>
    <Member MemberName=".ctor">
      <MemberSignature Language="C#" Value="protected DataTemplateSelector ();" />
      <MemberSignature Language="ILAsm" Value=".method familyhidebysig specialname rtspecialname instance void .ctor() cil managed" />
      <MemberType>Constructor</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <Parameters />
      <Docs>
        <summary>Creates a new <see cref="T:Xamarin.Forms.DataTemplateSelector" /> with default values.</summary>
        <remarks>Application developers should provide their own constructors to create and store the <see cref="T:Xamarin.Forms.DataTemplate" /> objects that can be returned by this <see cref="T:Xamarin.Forms.DataTemplateSelector" />.</remarks>
      </Docs>
    </Member>
    <Member MemberName="OnSelectTemplate">
      <MemberSignature Language="C#" Value="protected abstract Xamarin.Forms.DataTemplate OnSelectTemplate (object item, Xamarin.Forms.BindableObject container);" />
      <MemberSignature Language="ILAsm" Value=".method familyhidebysig newslot virtual instance class Xamarin.Forms.DataTemplate OnSelectTemplate(object item, class Xamarin.Forms.BindableObject container) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>Xamarin.Forms.DataTemplate</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="item" Type="System.Object" />
        <Parameter Name="container" Type="Xamarin.Forms.BindableObject" />
      </Parameters>
      <Docs>
        <param name="item">The data for which to return a template.</param>
        <param name="container">An optional container object in which the developer may have opted to store <see cref="T:Xamarin.Forms.DataTemplateSelector" /> objects.</param>
        <summary>Calls <see cref="M:Xamarin.Forms.DataTemplateSelector.SelectTemplate" />.</summary>
        <returns>A developer-defined <see cref="T:Xamarin.Forms.DataTemplate" /> that can be used to display <paramref name="item" />.</returns>
        <remarks>
          <para>This method throws an exception if <see cref="M:Xamarin.Forms.DataTemplateSelector.SelectTemplate" /> returns an instance of <see cref="T:Xamarin.Forms.DataTemplateSelector" />.</para>
        </remarks>
      </Docs>
    </Member>
    <Member MemberName="SelectTemplate">
      <MemberSignature Language="C#" Value="public Xamarin.Forms.DataTemplate SelectTemplate (object item, Xamarin.Forms.BindableObject container);" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig instance class Xamarin.Forms.DataTemplate SelectTemplate(object item, class Xamarin.Forms.BindableObject container) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>Xamarin.Forms.DataTemplate</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="item" Type="System.Object" />
        <Parameter Name="container" Type="Xamarin.Forms.BindableObject" />
      </Parameters>
      <Docs>
        <param name="item">The data for which to return a template.</param>
        <param name="container">An optional container object in which the developer may have opted to store <see cref="T:Xamarin.Forms.DataTemplateSelector" /> objects.</param>
        <summary>When overriden by developers in a derived class, returns a <see cref="T:Xamarin.Forms.DataTemplate" /> for <paramref name="item" />.</summary>
        <returns>
          <para>A developer-defined <see cref="T:Xamarin.Forms.DataTemplate" /> that can be used to display <paramref name="item" />.</para>
        </returns>
        <remarks>
          <para>Developers should ensure that this method never returns a <see cref="T:Xamarin.Forms.DataTemplateSelector" /> object, as this will cause the <see cref="M:Xamarin.Forms.DataTemplateSelector.OnSelectTemplate" /> method to throw an exception.</para>
          <block subset="none" type="note">
            <para>Developers should note that the he Android platform is limited to 20 templates per list view.</para>
          </block>
          <example>The following example shows a basic use:
<code lang="c#"><![CDATA[class MyDataTemplateSelector : DataTemplateSelector
{
    public MyDataTemplateSelector ()
    {
        // Retain instances
        this.templateOne = new DataTemplate (typeof (ViewA));
        this.templateTwo = new DataTemplate (typeof (ViewB));
    }

    protected override DataTemplate OnSelectTemplate (object item, BindableObject container)
    {
        if (item is double)
            return this.templateOne;
        return this.templateTwo;
    }

    private readonly DataTemplate templateOne;
    private readonly DataTemplate templateTwo;
}]]></code></example>
        </remarks>
      </Docs>
    </Member>
  </Members>
</Type>