हाँ, आप का उपयोग कर सकते हैं DataTemplateSelector करने के लिए इस लक्ष्य को हासिल ।
एक DataTemplateSelector
इस्तेमाल किया जा सकता का चयन करने के लिए एक DataTemplate
क्रम में के मूल्य पर आधारित एक डेटा-बाउंड संपत्ति. यह सक्षम बनाता है एकाधिक DataTemplates करने के लिए लागू किया जा करने के लिए एक ही वस्तु के प्रकार, उपस्थिति को अनुकूलित करने के लिए विशेष वस्तुओं ।
1.बनाने के एक DataTemplateSelector
एक डेटा टेम्पलेट चयनकर्ता लागू किया जाता है बनाने के द्वारा है कि एक वर्ग से विरासत में मिली DataTemplateSelector
. के OnSelectTemplate
विधि है, तो अधिरोहित वापस करने के लिए एक विशेष DataTemplate.
आप उल्लेख कर सकते हैं निम्न कोड:
public class UrlTemplateSelector : DataTemplateSelector
{
public DataTemplate ImageTemplate { get; set; }
public DataTemplate VideoTemplate { get; set; }
public DataTemplate OtherTemplate { get; set; }
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
ItemModel model = (ItemModel)item;
if (model.Url.EndsWith(".mp4")|| model.Url.EndsWith(".avi")|| model.Url.EndsWith(".rmvb")) // you can add multiple video file suffixes
{
return VideoTemplate;
}
else if (model.Url.EndsWith(".png")|| model.Url.EndsWith(".bmp") || model.Url.EndsWith(".jpg"))//you can add multiple image file suffixes
{
return ImageTemplate;
}
else {
return OtherTemplate;
}
}
}
मान लीजिए ItemModel
है binded आइटम.
public class ItemModel
{
public string Name { get; set; }
public string Url { get; set; }
}
2. उपयोग(मान लीजिए पृष्ठ है TestPage
)
TestPage.xaml
<ContentPage.Resources>
<ResourceDictionary>
<DataTemplate x:Key="imageTemplate">
<ViewCell>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*" />
<ColumnDefinition Width="0.6*" />
</Grid.ColumnDefinitions>
<Label Text="{Binding Name}" TextColor="Green" FontAttributes="Bold" />
<Image Grid.Column="1" Source="{Binding Url}" />
</Grid>
</ViewCell>
</DataTemplate>
<DataTemplate x:Key="videoTemplate">
<ViewCell>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*" />
<ColumnDefinition Width="0.6*" />
</Grid.ColumnDefinitions>
<Label Text="{Binding Name}" TextColor="Red" FontAttributes="Bold" />
<behaviors:MediaElement Grid.Column="1" Source="{Binding Url}" />
</Grid>
</ViewCell>
</DataTemplate>
<local:UrlTemplateSelector x:Key="mediaUrlTemplateSelector" ImageTemplate="{StaticResource imageTemplate}" VideoTemplate="{StaticResource videoTemplate}" />
</ResourceDictionary>
</ContentPage.Resources>
<StackLayout Margin="20">
<Label Text="ListView with a DataTemplateSelector" FontAttributes="Bold" HorizontalOptions="Center" />
<ListView x:Name="listView" Margin="0,20,0,0" ItemTemplate="{StaticResource mediaUrlTemplateSelector}" />
</StackLayout>
अधिक जानकारी के लिए, आप जाँच कर सकते हैं:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/templates/data-templates/selector.
और वहाँ है एक नमूना में शामिल दस्तावेज़ के ऊपर, आप यह कोशिश कर सकते हैं.