2016-07-08 4 views
0

メッセージオブジェクトを表示するリストビューを使用してメッセージングアプリケーションを作成しています。C#とXAMLの複数形式のリストビュー

新しいユーザーが参加すると、「John joined」などの追加が必要になりますが、メッセージとは異なる形式にしたいと考えています。

どうすればこの問題を解決できますか?

答えて

1

ItemsControl.ItemTemplateSelector propertyListViewに実装することができます。

たとえば、次のように最初の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; } 
} 

このListViewのレンダリング画像はこちら: enter image description here

+0
+0

@ジェニー、私が知っているように、それは既知の問題です、無視しても問題ありません。 –

0

はあなたのリストビューで定義された2つのDatatemplatesでCompositionCollectionを使用することができItemsControl with multiple DataTemplates for a viewmodel

、この質問への受け入れ答えを見てください。通常のメッセージの場合は1つ、結合メッセージの場合は1つです。

+0

いいえ、OPはUWPアプリについての質問をし、そしてあなたは、WPFアプリについての方法を提供します。質問のタグに気づいてください。 –

関連する問題