我正在尝试设置一个应用程序,它允许我显示从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中显示我的Items Collection的最后一项。我读到了有关创建自定义值转换器的信息,但是我第一次尝试使用它并没有那么顺利。将我最新的accelX,accelY和accelZ数据绑定到TextBlocks并让它们显示的最简单方法是什么?
答案 0 :(得分:3)
在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}" />