C# 在静态方法中使用非静态值?
我目前正在使用来自的示例应用程序,它实时显示来自传感器的数据。我现在的目标是用这些数据显示一个图表,所以我使用Microcharts包。当使用以下代码处理静态数据(并将列表声明为静态)时,图表工作正常,但是,当我尝试使用实时数据(CharacteristicValue)时,会出现错误: 错误CS0120非静态字段、方法或属性“CharacteristicDetailViewModel.entries”需要对象引用C# 在静态方法中使用非静态值?,c#,visual-studio,xamarin,xamarin.forms,viewmodel,C#,Visual Studio,Xamarin,Xamarin.forms,Viewmodel,我目前正在使用来自的示例应用程序,它实时显示来自传感器的数据。我现在的目标是用这些数据显示一个图表,所以我使用Microcharts包。当使用以下代码处理静态数据(并将列表声明为静态)时,图表工作正常,但是,当我尝试使用实时数据(CharacteristicValue)时,会出现错误: 错误CS0120非静态字段、方法或属性“CharacteristicDetailViewModel.entries”需要对象引用 错误CS0236字段初始值设定项无法引用非静态字段、方法或属性“Character
错误CS0236字段初始值设定项无法引用非静态字段、方法或属性“CharacteristicDetailViewModel.CharacteristicValueTemp” 我知道这是因为数据在变化,但我想知道是否有什么方法可以用来实时显示数据 在我的ViewModel中,我有:
public List<ChartEntry> entries = new List<ChartEntry>
{
new ChartEntry(CharacteristicValue)
{
Color=SKColor.Parse("#FF1943"),
Label ="January",
ValueLabel = "200"
},
new ChartEntry(400)
{
Color = SKColor.Parse("00BFFF"),
Label = "March",
ValueLabel = "400"
},
};
(是的,我知道这个图表现在毫无意义,我只是想在它变得更复杂之前进行更新)
谢谢!:)
CharacteristicDetailViewModel.entries
不是静态成员。您需要一个CharacteristicDetailViewModel
的具体实例:
var myCharacteristicDetailVM = /*some initializing or retrieval logic of a concrete instance of the VM*/
然后:
ChartTest.Chart = new LineChart()
{
Entries = myCharacteristicDetail.entries /*a concrete instance of the VM*/,
LineMode = LineMode.Straight,
LineSize = 8,
PointMode = PointMode.Square,
PointSize = 18,
};
也就是说,您似乎对c#中的
static
的实际含义有着深刻的误解。我建议你仔细阅读这个主题。我认为最后你必须重新绑定数据,因此不需要静态列表。然后您只需使用模型绑定ect。再看看这里:静态和只读不是一回事。我想你把这两个搞混了。静态列表可以更改其内容。除非您还声明它为只读。@Isparia您好,您是否能够使此代码正常工作?我已经尝试了几十次,但是我从来没有得到“myApi”应该是什么,我尝试了很多变量,但是GetValuesAssync()没有任何效果。我试着只使用float[]作为值,但屏幕上没有图表。您需要将被调用的成员设置为静态。您好,我不太清楚您所说的VM的具体实例的初始化或检索逻辑是什么意思,但我假设是var myCharacteristicDetailVM=new CharacteristicDetailViewModel();?我记得在过去的一些绑定教程中,我本应该在某个时候编写这个,但是,由于我使用蓝牙,这个功能实际上需要一个适配器,所以我仍然无法使它工作:s(完整视图模型)
ChartTest.Chart = new LineChart()
{
Entries = myCharacteristicDetail.entries /*a concrete instance of the VM*/,
LineMode = LineMode.Straight,
LineSize = 8,
PointMode = PointMode.Square,
PointSize = 18,
};