如何根据id显示来自云端的消息的不同DataTemplate?

时间:2016-07-27 21:46:26

标签: c# xaml azure uwp

您好我正在开发一个类似于messenger的UWP应用程序,我希望用户登录然后在数据库中插入消息。我需要的是:我想为用户发送的消息和其他用户发送的消息显示不同的DataTemplate。 我不知道如何实现这一点。

1 个答案:

答案 0 :(得分:0)

您可以使用DataTemplateSelector来完成此操作。您可以按照以下步骤操作:

  1. 定义自定义DataTemplateSelector类:

    Public Shared Function dbToDate(o As Object) As DateTime?
        If o Is DBNull.Value Then
            Return Nothing
        Else
            Return Convert.ToDateTime(o)
         End If
    End Function
    
  2. 将两个不同的模板和DataTemplateSelector添加到页面的资源中,不要忘记首先使用命名空间:

    public class MyTemplateSelector: DataTemplateSelector
    {
        public DataTemplate VIPTemplate { get; set; }//DataTemplate for special user
        public DataTemplate CustomerTemplate { get; set; }//DataTemplate for normal user
        protected override DataTemplate SelectTemplateCore(object item)
        {
            if (((Customer)item).Id.ToLower() == "vipcustomer")
            {
                //if current user is vip then user VIP Template.
                return VIPTemplate;
            }
            else
            {
                //otherwise return normal template.
                return CustomerTemplate;
            }
        }
    }
    
  3. 在ItemsControl中使用自定义选择器:

    <Page
         ...
         xmlns:selector="using:DataTemplateSelectorSample.TemplateSelectors"
         ...
    >
    
    <Page.Resources>
       <DataTemplate x:Key="VipTemplate">
           <StackPanel Background="Green" Width="500" Height="25">
               <TextBlock Text="{Binding Name}"></TextBlock>
           </StackPanel>
       </DataTemplate>
       <DataTemplate x:Key="CustomerTemplate">
           <StackPanel  Width="500" Height="25">
               <TextBlock Text="{Binding Name}"></TextBlock>
           </StackPanel>
       </DataTemplate>
       <selector:MyTemplateSelector x:Key="userTemplateSelector" CustomerTemplate="{StaticResource ResourceKey=CustomerTemplate}" VIPTemplate="{StaticResource ResourceKey=VipTemplate}"/>
    </Page.Resources>
    
  4. 现在,每个ID为<ListView Name="myListView" ItemTemplateSelector="{StaticResource userTemplateSelector}"></ListView> 的用户都将拥有绿色背景。

    您可以通过以下链接找到完整的示例:DataTemplateSelectorSample