我想将ID与产品名称连接起来,如下图所示
问题是我加载到列表中的属性的类型为Object,这里是我的数据结构
public class FabricanteFormResponse
{
[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; }
}
因此,逻辑是,当列采用值2时,它是乘积;当列采用值1时,它是ID。
然后,当我打开ViewModel时,创建一个Sqs的ObservableCollection和一个LoadSubstances()方法,当带有LINQ的列为2时,该方法将加载Object类型的此对象的列表
#region Constructor
public ResultadosHDSViewModel()
{
Sqss = new ObservableCollection<Sqs>();
LoadSustancias();
}
#endregion
#region Metodos
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()).ToList();
Sqss.Clear();
foreach (var item in sustancias)
{
foreach (var itemSqs in item)
{
if (itemSqs.Column == 2)
{
Sqss.Add(itemSqs);
}
}
}
}
#endregion
在我的Vista中,我占据以下绑定
<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"
FontSize="Small"
TextColor="{StaticResource das.color.texto}"
VerticalOptions="CenterAndExpand" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
由于占用了前面介绍的数据结构,我可以将ID与产品名称连接在一起吗?我可以从我的LoadSubstance方法中做到吗?我应该创建一个新属性吗?
对我有帮助吗?
答案 0 :(得分:0)
从列表的Sqs
中获取相关项目
List<Sqs> item = Sqs[i];
string formattedString = $"({item[0].Value}) {item[1].Value}";
// e.g. "(2) 10-31 LIMPIADOR DE CONTACTOS"
假设id和product始终是前两个项。
但是,如果您创建一个Product
类并将原始的Json属性列表转换为产品列表,则会容易得多
public class Product
{
public Product()
{
}
public Product(List<Sqs> properties)
{
Id = (int)properties[0].Value;
Name = (string)properties[1].Value;
Manufacturer = (string)properties[2].Value;
Keywords = (string)properties[3].Value;
}
public int Id { get; set; }
public string Name { get; set; }
public string Manufacturer { get; set; }
public string Keywords { get; set; }
public string ProductText => $"({Id}) {Name}";
public override string ToString() => ProductText;
}
此类具有属性ProductText
,并重写ToString
以使其根据需要产生格式化的字符串。
将Sqss
替换为Products
public ObservableCollection<Product> Products { get; set; }
然后,您可以使用{p>在LoadSustancias()
中创建产品列表
Products = new ObservableCollection<Product>(mainViewModel.FabricanteForm.Results.Sqs
.Select(props => new Product(props))
);
现在,您可以将ListView
绑定到Products
列表,并将标签绑定到<Label Text="{Binding ProductText}" ...
。