【发布时间】:2016-03-19 20:47:22
【问题描述】:
所以我有一个来自 WinForm 项目的简单 UDP 聊天应用程序,我想让它看起来更好一点,所以我在 WPF 中重新制作它。当我意识到我可以轻松地将 2 个或更多 TextBlocks 放入 ListItem 时,我想显示每个聊天的最后一条消息,如下所示:
但我不知道如何编辑那些 TextBlocks :( 我刚开始使用 WPF,所以我打赌我只是复制了一个,但正因为如此,我什至不知道如何搜索这个问题。
这是自定义列表框:
<ListBox x:Name="myList" HorizontalAlignment="Left" Width="264" ScrollViewer.VerticalScrollBarVisibility="Hidden" ScrollViewer.HorizontalScrollBarVisibility="Disabled" BorderThickness="0,1,1,0" MouseLeftButtonUp="myList_MouseLeftButtonUp" Margin="0,25,0,0">
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderBrush="LightGray" BorderThickness="0,0,0,1" Width="250">
<DockPanel Margin="0,7">
<Ellipse Name="ellipse" Margin="5" DockPanel.Dock="Left" Style="{DynamicResource elstyle}">
</Ellipse>
<TextBlock Text="{Binding Name}" DockPanel.Dock="Top" Margin="0,0,0,7" FontWeight="Bold" MaxWidth="250"></TextBlock>
<TextBlock Text="{Binding ID}" DockPanel.Dock="Top" Visibility="Hidden" FontSize="1.333"></TextBlock>
<TextBlock x:Name="last_message" Text="{Binding LastMessage}" DockPanel.Dock="Bottom" MaxWidth="250"></TextBlock>
</DockPanel>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
【问题讨论】:
-
“如何处理那些 TextBlocks”是什么意思?你的
TextBlocks看起来不错。您的项目视图模型是什么样的?是否有publicName、ID和LastMessageproperties? -
对不起,我的意思是如何编辑它们。每次客户收到一条消息时,我都想插入最后一条消息。例如这样的:
ListBox.Items[0].last_message.text = "Hi, this is Zalma"; -
您不能编辑它们。您在视图模型中更改绑定的
LastMessage属性,如果引发INotifyPropertyChanged.PropertyChanged事件,它将被UI 拾取并且TextBlock将被刷新。你的视图模型类是什么样子的? -
抱歉,不知道什么是视图模型
-
每个项目后面都有一个类。我猜您将
myList.ItemsSource设置为IEnumerable<MyItem>的某个实现,其中MyItem是您的视图模型,应该具有Name、ID和LastMessage属性。如果不是,你如何填充你的列表?