您好我正在开发一个类似于messenger的UWP应用程序,我希望用户登录然后在数据库中插入消息。我需要的是:我想为用户发送的消息和其他用户发送的消息显示不同的DataTemplate。 我不知道如何实现这一点。
答案 0 :(得分:0)
您可以使用DataTemplateSelector来完成此操作。您可以按照以下步骤操作:
定义自定义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
将两个不同的模板和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;
}
}
}
在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>
现在,每个ID为<ListView Name="myListView" ItemTemplateSelector="{StaticResource userTemplateSelector}"></ListView>
的用户都将拥有绿色背景。
您可以通过以下链接找到完整的示例:DataTemplateSelectorSample