【问题标题】:WPF Chat List Box - With user Image displayWPF 聊天列表框 - 带用户图像显示
【发布时间】:2013-06-21 13:52:04
【问题描述】:

您好,我正在开发 WPF 聊天应用程序,我想将用户图片保存在数据库中,并且我想将每个用户及其图片加载到朋友列表框中,这是我当前的代码,但我没有知道如何从这个开始。

        private void LoadFriends(Client.State client)
    {
        foreach (Client.Structures.Society.Friend friend in client.Friends.Values)
        {
            Friends_listBox.Items.Add(friend.Name);
            FriendsCount++;
        }
    }

我知道如何使用这样的 Xaml 代码将项目添加到列表框中:

            <ListBoxItem Background="LightCoral" Foreground="Red"

         FontFamily="Verdana" FontSize="12" FontWeight="Bold">

            <StackPanel Orientation="Horizontal">

                <Image Source="/my_App;component/Img.ico" Height="30"></Image>

                <TextBlock Text="Coffie"></TextBlock>

            </StackPanel>

        </ListBoxItem>

但我不知道用 C# 代码来做这个...

我如何将用户图片存储到数据库??

对此有什么想法吗?

【问题讨论】:

  • 创建一个包含 2 个属性(string 名称,ImageSource 图像)的类(我们称之为 Friend)并使其实现 INPC。现在在您的代码隐藏中创建一个ObservableCollection&lt;Friend&gt; FriendsList 并将您的ListBoxItemSource 设置为FriendsList。在 xaml 中,将 ListBox.ItemTemplate 设置为 DataTemplate 用于 Type="{x:Type local:Friend}"。在此 DataTemplate 中,现在有您的 StackPanel 和 Child Image,其 Source 可以从 DataContext 绑定到 Image 和类似的 TextBlock -> Name。还将 xaml 视图的 DataContext 设置为包含 FriendsList 的代码隐藏
  • 谢谢,我已经创建了一个像这样public class Friend : Interfaces.IKnownPerson { public string Name { get; set; } public System.Windows.Media.ImageSource FriendAvatar { get; set; } } 的名为Friend 的类,但不知道下一步如何加载图像...

标签: c# wpf listbox chat


【解决方案1】:

我真的认为您应该先花一些时间学习 WPF 的基础知识,而不是直接将应用程序的多个方面整合在一起。

Maybe this could help - a sample

^^ 项目包含我在对您的问题的评论中所说的一切。我选择不将此示例基于 MVVM cos,这可能会让您更加困惑(请仅使用示例作为一个想法,如果您还没有这样做,请查看 MVVM)

尝试在处理数据库之前先了解示例,如果没有,请获取有关 WPF 的书并开始阅读。没有比这更基本的了。

在示例中,

Friend.cs 应该类似于您发布的添加 INPC 实现的内容。

MainWindow.xaml 应该显示ListBox.ItemTemplate 如何拥有DataTemplate 并设置为绑定到DataContext 中的属性

MainWindow.xaml.cs 应该显示如何填充FriendsList 集合中的项目,以及如何为MainWindow 设置DataContext

如果您对所有这些都感到满意(并且可能对Style 和资源有一些了解),那么您可以开始考虑如何使用数据库来填充FriendsList 的源代码

要么在那个阶段提出一个新问题,要么参考以前的问题,如thisthisthis

【讨论】:

  • 非常感谢这个大帮助,我理解代码,但实际上这是我第一次在我的工作中使用,我现在收到了这条消息Error 1 The type or namespace name 'CallerMemberNameAttribute' could not be found (are you missing a using directive or an assembly reference?) C:\WpfApplication16\WpfApplication16\Friend.cs 46 50 WpfApplication16
  • 欢迎您。 WPF 很棒。从基础开始,逐步向上。您可以通过“谷歌搜索”在 SO 中找到有关入门级内容的大量帮助。一定要拿起像Sams Teach Yourself WPF in 24 Hours 这样的书来快速学习基础知识。祝你好运:)
  • 我已经是 C# 程序员了,但是我是 wpf 的新手,虽然我使用 wpf 创建了一些程序,但我真的需要解释我的问题,仅此而已,谢谢你的伙伴。跨度>
  • @user1994619 CallerMemberNameAttribute 在 .NET4.5 中添加。我已将 INPC 实现和项目目标框架更新为 .NET4。尝试再次下载示例,您应该可以正常工作
猜你喜欢
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 2023-02-14
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
相关资源
最近更新 更多