将ObservableCollection的最后一项绑定到TextBlock

本文关键字:一项 绑定 TextBlock ObservableCollection 最后 | 更新日期: 2023-09-27 17:50:28

我目前正在尝试设置一个应用程序,允许我从COM端口显示数据输出,所有这些都是数字。因为我对c#还比较陌生,所以我想先为我的类创建一些SampleData:

<vm:SensorViewModel xmlns:vm="clr-namespace:MEMS_Analyzer.Content.Data">
    <vm:SensorViewModel.Items>
        <vm:SensorData  id="0" accelX="-0.154" accelY="-0.557" accelZ="0.770" gyroX="6.280" gyroY="3.902" gyroZ="-1.280" magnetoX="18.600" magnetoY="14.399" magnetoZ="45.599" airPressure="1017.095" airTemp="32.48" />
        <vm:SensorData  id="1" accelX="-0.150" accelY="-0.357" accelZ="1.270" gyroX="6.180" gyroY="4.002" gyroZ="-1.270" magnetoX="18.300" magnetoY="14.339" magnetoZ="45.500" airPressure="1016.095" airTemp="32.28" />
        <vm:SensorData  id="2" accelX="-0.164" accelY="-1.557" accelZ="0.270" gyroX="6.580" gyroY="2.902" gyroZ="-2.280" magnetoX="17.900" magnetoY="15.399" magnetoZ="40.549" airPressure="1017.790" airTemp="32.38" />
        <vm:SensorData  id="3" accelX="-1.154" accelY="-0.724" accelZ="0.218" gyroX="4.213" gyroY="3.342" gyroZ="-1.234" magnetoX="11.632" magnetoY="14.334" magnetoZ="38.523" airPressure="1017.534" airTemp="32.48" />
        <vm:SensorData  id="5" accelX="-1.987" accelY="-0.307" accelZ="1.770" gyroX="8.280" gyroY="1.902" gyroZ="-0.280" magnetoX="20.600" magnetoY="13.399" magnetoZ="40.599" airPressure="1030.095" airTemp="33.48" />
    </vm:SensorViewModel.Items>
</vm:SensorViewModel>

我设置了一个带有网格的新页面,我可以像这样成功地导航到:

<Grid Style="{StaticResource ContentRoot}">  
        <ScrollViewer>
            <StackPanel MinWidth="200">
                <TextBlock Text="ACCELERATION" Style="{StaticResource Heading2}" />
            </StackPanel>
        </ScrollViewer>
</Grid>

我现在的问题是,我想有一个TextBlock显示我在SensorModel的项目集合的最后一个项目。我读过关于创建自定义值转换器的文章,但是我的第一次尝试并不顺利。将我最新的accelX, accelY和accelZ数据绑定到TextBlocks并让它们显示的最简单方法是什么?

将ObservableCollection的最后一项绑定到TextBlock

在WPF中,我们通常只创建我们需要的任何属性,以我们想要的方式显示数据。在您的情况下,最简单的方法是将集合中的最后一项作为代码后面的属性公开(当然,您还需要在那里定义集合):

public SensorData LastItem
{
    get { return SensorDataCollection.Last(); }
}
public ObservableCollection<SensorData> SensorDataCollection
{
    get { return sensorDataCollection; }
    set
    {
        sensorDataCollection = value;
        NotifyPropertyChanged("SensorDataCollection"); // <-- INotifyPropertyChanged
        NotifyPropertyChanged("LastItem"); // <-- Notify LastItem change here too
    }
}

<TextBlock Text="{Binding LastItem}" />