MVVM WPF数据绑定到类似Skype的聊天室?

MVVM WPF数据绑定到类似Skype的聊天室?,wpf,data-binding,mvvm,chat,Wpf,Data Binding,Mvvm,Chat,嘿,伙计们,我有一个有趣的问题: 你们都知道并喜欢Skype聊天界面:每条信息都被封装在一个气泡中,带有表情符号和链接功能,左边还有一个化身 如果我要创建一个类似Skype的界面,那么最理想的WPF组件是什么 我使用的是MVVM,所以我的所有消息都作为一个可观察的集合存储在ViewModel中 我在绑定到RichTextBox时遇到了问题,因此我研究了绑定到Listbox的问题,其中每个列表项都是一条消息,并且每个项的样式都有Skypey边框和头像等 有什么想法吗?我找到的唯一合适的解决方案是使

嘿,伙计们,我有一个有趣的问题:

你们都知道并喜欢Skype聊天界面:每条信息都被封装在一个气泡中,带有表情符号和链接功能,左边还有一个化身

如果我要创建一个类似Skype的界面,那么最理想的WPF组件是什么

我使用的是MVVM,所以我的所有消息都作为一个可观察的集合存储在ViewModel中

我在绑定到RichTextBox时遇到了问题,因此我研究了绑定到Listbox的问题,其中每个列表项都是一条消息,并且每个项的样式都有Skypey边框和头像等


有什么想法吗?

我找到的唯一合适的解决方案是使用flowdocumentreader和ivalueconverter将字符串数组转换为flowdocument。一旦我自己编写了类似bbcode的脚本语言,它实际上工作得很好

这是我从中学到的样本


这对我来说有点过头了,所以我最终只制作了ivalueconverter和一种简单的脚本语言。

我找到的唯一合适的解决方案是使用flowdocumentreader和ivalueconverter将字符串数组转换为flowdocument。一旦我自己编写了类似bbcode的脚本语言,它实际上工作得很好

这是我从中学到的样本


这对我来说有点过分了,所以我最终只制作了ivalueconverter和一种简单的脚本语言。

我看到的解决方案是您应该使用DataTemplate和样式。其思想如下:每个文本消息由类对象表示。现在,当您将消息绑定到模板内时,您可以明确地告诉您希望消息的外观。 您最好创建一个usercontrol,它将知道如何表示您的消息

代表类似想法但想法相同的示例:

    <Window.Resources>
<DataTemplate DataType="{x:Type model:MessageModel}">
    <ed:Callout AnchorPoint="0,1.5" Margin="10" CalloutStyle="RoundedRectangle" Content="{Binding Path=Text}" Fill="#FFF4F4F5" FontSize="14.667" HorizontalAlignment="Left" Height="100" Stroke="Black" VerticalAlignment="Top" Width="200" />                              
</DataTemplate>
</Window.Resources>

<Grid>
    <ItemsControl ItemsSource="{Binding Path=MsgList}" />
</Grid>


对于该示例,您需要附加Blend 4附带的Microsoft.Expression.Drawing.sll。

我看到的解决方案是您应该使用DataTemplate和Style。其思想如下:每个文本消息由类对象表示。现在,当您将消息绑定到模板内时,您可以明确地告诉您希望消息的外观。 您最好创建一个usercontrol,它将知道如何表示您的消息

代表类似想法但想法相同的示例:

    <Window.Resources>
<DataTemplate DataType="{x:Type model:MessageModel}">
    <ed:Callout AnchorPoint="0,1.5" Margin="10" CalloutStyle="RoundedRectangle" Content="{Binding Path=Text}" Fill="#FFF4F4F5" FontSize="14.667" HorizontalAlignment="Left" Height="100" Stroke="Black" VerticalAlignment="Top" Width="200" />                              
</DataTemplate>
</Window.Resources>

<Grid>
    <ItemsControl ItemsSource="{Binding Path=MsgList}" />
</Grid>


例如,您需要附加Blend 4附带的Microsoft.Expression.Drawing.sll。

我刚刚考虑过在每条聊天信息中使用一个用户控件,其中用户控件的样式为XAML,带有一个图像和一个文本块,但我需要在新聊天时动态添加这些用户控件。它变得相当复杂。我刚刚想到为每条聊天信息使用一个用户控件,其中用户控件的样式为XAML,带有一个图像和一个文本块,但我需要在新聊天时动态添加这些用户控件。它变得相当复杂。