C# 如何在列表中显示Object类型的属性
我想用下面的方式显示化学物质的列表 问题是,在我看来,我没有表现出任何东西 当我打开ResultadosHDSViewModel时,构造函数中有以下方法C# 如何在列表中显示Object类型的属性,c#,object,xamarin,xamarin.forms,model-binding,C#,Object,Xamarin,Xamarin.forms,Model Binding,我想用下面的方式显示化学物质的列表 问题是,在我看来,我没有表现出任何东西 当我打开ResultadosHDSViewModel时,构造函数中有以下方法 ObservableCollection<Sqs> sqss; public ObservableCollection<Sqs> Sqss { get { return sqss; } set { if (sqss !=
ObservableCollection<Sqs> sqss;
public ObservableCollection<Sqs> Sqss
{
get
{
return sqss;
}
set
{
if (sqss != value)
{
sqss = value;
PropertyChanged?.Invoke(
this,
new PropertyChangedEventArgs(nameof(Sqss)));
}
}
}
public ResultadosHDSViewModel()
{
LoadSustancias();
}
public async void LoadSustancias()
{
var mainViewModel = MainViewModel.GetInstance();
var sustancias = mainViewModel.FabricanteForm.Results.Sqs.Select(c => c.Where(v => v.Column == 2)
.Select(u => u).ToList().FirstOrDefault());
foreach (var item in sustancias)
{
Sqss.Add(item);
}
}
我的LINQ查询sustancias的结果是:
问题是,通过使用foreach来填充我的ObservableCollection Sqss,我的应用程序就会崩溃
我附加要存储数据值的视图
ResultadosHDSView.XAML:
<StackLayout
BindingContext="{Binding ResultadosHDS}"
Padding="5">
<ListView ItemsSource="{Binding Sqss}"
SelectionMode="None">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal"
VerticalOptions="CenterAndExpand"
Padding="16,0,0,0">
<Label Text="{Binding Value}"
HorizontalOptions="FillAndExpand"
VerticalOptions="CenterAndExpand" />
<Button
Text="VER"
HorizontalOptions="End"
VerticalOptions="Center"
HeightRequest="35"
WidthRequest="55"
Command="{Binding VerCommand}"/>
<Button
Text="HDS"
VerticalOptions="Center"
HeightRequest="35"
WidthRequest="55"
Command="{Binding HDSCommand}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
我还附上了我所涉及的类的定义
public class FabricanteFormResponse
{
[JsonProperty(PropertyName = "userMessage")]
public string UserMessage { get; set; }
[JsonProperty(PropertyName = "status")]
public int Status { get; set; }
[JsonProperty(PropertyName = "results")]
public FabricanteForm Results { get; set; }
}
public class FabricanteForm
{
[JsonProperty(PropertyName = "columns")]
public List<int> Columns { get; set; }
[JsonProperty(PropertyName = "sqs")]
public List<List<Sqs>> Sqs { get; set; }
}
public class Sqs
{
[JsonProperty(PropertyName = "field")]
public string Field { get; set;}
[JsonProperty(PropertyName = "column")]
public int Column { get; set; }
[JsonProperty(PropertyName = "value")]
public Object Value { get; set; }
}
正如您所看到的,我的Object-Value属性是Object类型,它正是我想在视图的绑定中显示的属性
我做错了什么?Linq类型查询?我应该在扔掉物品之前扔掉它吗?我怎么做?有什么帮助吗?既然您是从构造函数调用该方法,我将用以下内容替换foreach循环:
Sqss = new ObservableCollection<Sqs>(sustancias);
由于您使用的是FirstOrDefault,因此我认为可能存在没有第2列的项,因此如果您只想要不为null的项:
Sqss = new ObservableCollection<Sqs>(sustancias.Where(s => s != null));
您需要首先初始化SQS。sqss=新的可观测集合;在构造函数中?在方法中?在哪里@Jasonanywhere,但在你尝试使用它之前。构造器将是一个不错的选择。它的实现在下面的行Sqss=新的可观察收集物质中失败和爆发,谢谢你的帮助,但是我没有把数据保存到我的Sqss列表中@Skallfalls和burts不是有用的信息。如果它正在崩溃,导致崩溃的具体异常是什么?另外,您可能应该初始化sqss私有变量,而不是sqss公共属性。@Jason,是的,您可以调用私有字段。我使用了public属性,因为它发送了一个属性更改通知,但是因为它是从构造函数使用的,所以这无关紧要。
Sqss = new ObservableCollection<Sqs>(sustancias.Where(s => s != null));
private void LoadSustancias()
{