UWP自下而上的聊天列表View带有XAML



所以,我正在制作一个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;
        }

相关内容

最新更新