メッセージオブジェクトを表示するリストビューを使用してメッセージングアプリケーションを作成しています。C#とXAMLの複数形式のリストビュー
新しいユーザーが参加すると、「John joined」などの追加が必要になりますが、メッセージとは異なる形式にしたいと考えています。
どうすればこの問題を解決できますか?
メッセージオブジェクトを表示するリストビューを使用してメッセージングアプリケーションを作成しています。C#とXAMLの複数形式のリストビュー
新しいユーザーが参加すると、「John joined」などの追加が必要になりますが、メッセージとは異なる形式にしたいと考えています。
どうすればこの問題を解決できますか?
ItemsControl.ItemTemplateSelector propertyをListView
に実装することができます。
たとえば、次のように最初のDataTemplateSelector
からクラスを継承を作成します。ちょうどにデータを追加するの後ろのコードでは
<Page.Resources>
<DataTemplate x:Key="NormalMessageTemplate">
<TextBlock Text="{Binding Message}" FontSize="20" Foreground="Blue"/>
</DataTemplate>
<DataTemplate x:Key="JoinedMessageTemplate">
<TextBlock Text="{Binding Message}" FontSize="15" Foreground="Red"/>
</DataTemplate>
<local:MessageDataTemplateSelecotr x:Key="MessageDataTemplateSelecotr"
NormalTemplate="{StaticResource NormalMessageTemplate}"
JoinedTemplate="{StaticResource JoinedMessageTemplate}"/>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ListView ItemTemplateSelector="{StaticResource MessageDataTemplateSelecotr}" ItemsSource="{x:Bind listViewCollection}"/>
</Grid>
:
public class MessageDataTemplateSelecotr : DataTemplateSelector
{
public DataTemplate NormalTemplate { get; set; }
public DataTemplate JoinedTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
var message = item as MessageModel;
if (message.MessageType.ToString() == "Normal")
return NormalTemplate;
else
return JoinedTemplate;
}
}
は、その後、あなたがこのように、たとえば、このセレクタを使用することができますlistViewCollection
は次のようになります。
ObservableCollection<MessageModel> listViewCollection = new ObservableCollection<MessageModel>();
private enum _MessageType
{
Normal,
Joined
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
listViewCollection.Add(new MessageModel { Message = "hello world!", MessageType = _MessageType.Normal });
listViewCollection.Add(new MessageModel { Message = "John joined", MessageType = _MessageType.Joined });
}
そして私のMessageModel
クラスは、このようなものです:
public class MessageModel
{
public string Message { get; set; }
public Enum MessageType { get; set; }
}
はあなたのリストビューで定義された2つのDatatemplatesでCompositionCollectionを使用することができItemsControl with multiple DataTemplates for a viewmodel
、この質問への受け入れ答えを見てください。通常のメッセージの場合は1つ、結合メッセージの場合は1つです。
いいえ、OPはUWPアプリについての質問をし、そしてあなたは、WPFアプリについての方法を提供します。質問のタグに気づいてください。 –
@ジェニー、私が知っているように、それは既知の問題です、無視しても問題ありません。 –