所以,我正在制作一个UWP应用程序,您可以将其视为聊天客户端。因此,这里的问题是如何使我的XAML中的ListView自下而上而不是自上而下。换句话说,listview
的项目必须从底部到顶部添加,而不是现在。我已经完成了我所知道的一切,并且遵循了互联网上的许多说明,包括微软的文档,但我无法正常工作。我需要注意,代码运行,并且没有任何错误,但是列表是从上到下而不是反过来的。
这是我的XAML
中的May PageResource
:
<DataTemplate x:Key="MessageListDataTemplate" x:DataType="disc:IMessage">
<Border Background="#2C2F33" CornerRadius="5">
<StackPanel Margin="5">
<StackPanel Orientation="Horizontal" Margin="5,2,0,0">
<TextBlock TextAlignment="Left" Text="{x:Bind Author,Mode=OneWay}" Foreground="White" FontSize="14"/>
<TextBlock TextAlignment="Left" Margin="5,3,0,0" Text="{x:Bind Timestamp,Mode=OneWay,Converter={StaticResource TimeToStringConverter}}" Foreground="LightGray" FontSize="10"/>
</StackPanel>
<TextBlock TextAlignment="Left" Margin="10,2,0,0" TextWrapping="WrapWholeWords" Text="{x:Bind Content, Mode=OneWay}" Foreground="#99AAB5" FontSize="20" />
</StackPanel>
</Border>
</DataTemplate>
这是我的ListView
:
<ListView VerticalContentAlignment="Bottom" ItemsSource="{x:Bind ChatViewModel.MessageList, Mode=OneWay}" SelectionMode="None" ItemTemplate="{StaticResource MessageListDataTemplate}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="Margin" Value="0,0,5,5"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
如果您需要澄清等,请先发表评论。谢谢:)
基本上,我发现问题的解决方案只是躺在观察力的后面。从服务器收到的收集方式与我打算使用的收集方式相反。换句话说,收到的收集在索引0上有最新消息,第一个在索引n上(取决于您加载了多少消息)。我观察到,当我使用.add()在该集合上添加消息时,它将在其末尾添加,因此n 1。因此,似乎并不是最底层的主要原因是该系列被颠倒了。如今,添加的新消息落在底部。感谢大家的帮助!
我用来逆转它:
for (int i=0; i < messageList.Count/2; i++)
{
IMessage temp = messageList[i];
messageList[i] = messageList[messageList.Count - i - 1];
messageList[messageList.Count - i - 1]= temp;
}