如何解决如何绑定到 Xamarin MVVM 中的嵌套属性从 JSON 生成
我需要一些关于使用 Json2C# 从 JSON 绑定到生成类中的嵌套属性的建议。所以我使用了 firebase 云函数,我得到了一个返回的 json 字符串。我使用该字符串生成以下类。
public class BusinessReturnedModel
{
// Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse);
public class Longitude
{
public string stringValue { get; set; }
public string valueType { get; set; }
}
public class Line2
{
public string stringValue { get; set; }
public string valueType { get; set; }
}
public class City
{
public string stringValue { get; set; }
public string valueType { get; set; }
}
public class Postcode
{
public string stringValue { get; set; }
public string valueType { get; set; }
}
public class Line1
{
public string stringValue { get; set; }
public string valueType { get; set; }
}
public class County
{
public string stringValue { get; set; }
public string valueType { get; set; }
}
public class Country
{
public string stringValue { get; set; }
public string valueType { get; set; }
}
public class Fields
{
public Line2 line_2 { get; set; }
public City city { get; set; }
public Postcode postcode { get; set; }
public Line1 line_1 { get; set; }
public County county { get; set; }
public Country country { get; set; }
}
public class MapValue
{
public Fields fields { get; set; }
}
public class Address
{
public MapValue mapValue { get; set; }
public string valueType { get; set; }
}
public class Name
{
public string stringValue { get; set; }
public string valueType { get; set; }
}
public class ProfilePicture
{
public string stringValue { get; set; }
public string valueType { get; set; }
}
public class BusinessType
{
public string stringValue { get; set; }
public string valueType { get; set; }
}
public class Geohash
{
public string stringValue { get; set; }
public string valueType { get; set; }
}
public class Latitude
{
public string stringValue { get; set; }
public string valueType { get; set; }
}
public class FieldsProto
{
public Longitude longitude { get; set; }
public Address address { get; set; }
public Name name { get; set; }
public ProfilePicture profile_picture { get; set; }
public BusinessType business_type { get; set; }
public Geohash geohash { get; set; }
public Latitude latitude { get; set; }
}
public class Settings
{
public string projectId { get; set; }
public string firebaseVersion { get; set; }
public string libName { get; set; }
public string libVersion { get; set; }
}
public class Serializer
{
public bool allowUndefined { get; set; }
}
public class BackoffSettings
{
public int initialDelayMs { get; set; }
public int maxDelayMs { get; set; }
public double backoffFactor { get; set; }
}
public class ActiveClients
{
}
public class FailedClients
{
}
public class Promise
{
}
public class TerminateDeferred
{
public Promise promise { get; set; }
}
public class ClientPool
{
public int concurrentOperationLimit { get; set; }
public int maxIdleClients { get; set; }
public ActiveClients activeClients { get; set; }
public FailedClients FailedClients { get; set; }
public bool terminated { get; set; }
public TerminateDeferred terminateDeferred { get; set; }
}
public class Firestore
{
public Settings _settings { get; set; }
public bool _settingsFrozen { get; set; }
public Serializer _serializer { get; set; }
public string _projectId { get; set; }
public int registeredListenersCount { get; set; }
public int bulkWritersCount { get; set; }
public BackoffSettings _backoffSettings { get; set; }
public ClientPool _clientPool { get; set; }
}
public class Path
{
public List<string> segments { get; set; }
public string projectId { get; set; }
public string databaseId { get; set; }
}
public class Converter
{
}
public class Ref
{
public Firestore _firestore { get; set; }
public Path _path { get; set; }
public Converter _converter { get; set; }
}
public class ReadTime
{
public int _seconds { get; set; }
public int _nanoseconds { get; set; }
}
public class CreateTime
{
public int _seconds { get; set; }
public int _nanoseconds { get; set; }
}
public class UpdateTime
{
public int _seconds { get; set; }
public int _nanoseconds { get; set; }
}
public class BusinessItem
{
public FieldsProto _fieldsProto { get; set; }
public Ref _ref { get; set; }
public Serializer _serializer { get; set; }
public ReadTime _readTime { get; set; }
public CreateTime _createTime { get; set; }
public UpdateTime _updateTime { get; set; }
}
}
public class Record
{
public BusinessReturnedModel record;
}
我想要实现的是绑定到这些属性,下面是我的 XAML。
<ContentPage.Content>
<StackLayout>
<CollectionView ItemsSource="{Binding Businesses}"
SelectionMode="Single">
<CollectionView.ItemTemplate>
<DataTemplate x:DataType="businessReturned:BusinessReturnedModel">
<Grid Padding="10">
<Grid.RowDeFinitions>
<RowDeFinition Height="Auto" />
<RowDeFinition Height="Auto" />
</Grid.RowDeFinitions>
<Grid.ColumnDeFinitions>
<ColumnDeFinition Width="Auto" />
<ColumnDeFinition Width="Auto" />
</Grid.ColumnDeFinitions>
<Image Grid.RowSpan="2"
Source="{Binding what goes here!!!???}"
Aspect="AspectFill"
HeightRequest="60"
WidthRequest="60" />
<Label Grid.Column="1"
Text="{Binding}"
FontAttributes="Bold" />
<Label Grid.Row="1"
Grid.Column="1"
Text="{Binding}"
FontAttributes="Italic"
VerticalOptions="End" />
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</StackLayout>
</ContentPage.Content>
下面是我的视图模型 Searchviewmodel(无论如何都是相关的部分..)
public ICommand GetNearbyServicesCommand => new Command<List<BusinessItem>>(async (List<BusinessItem> businesses) => { BusinessList = await GetNearbyAsync(); });
public ObservableCollection<BusinessItem> Businesses { get; set; }
private List<BusinessItem> _businessList;
public List<BusinessItem> BusinessList
{
get
{
return _businessList;
}
set
{
if (_businessList != value)
{
_businessList = value;
Businesses = new ObservableCollection<BusinessItem>(value);
OnPropertyChanged();
}
}
}
...//public async Task<List<BusinessItem>> GetNearbyAsync()
//Here is the after http client get etc..
if (response.IsSuccessstatusCode)
{
var content = await response.Content.ReadAsstringAsync();
var myDeserializedClass = JsonConvert.DeserializeObject<List<BusinessItem>>(content);
Console.WriteLine(myDeserializedClass);
return myDeserializedClass;
}
//...
所以问题是,当我尝试绑定到属性时,我不能。我试过 Binding Record.Name、Binding record.Name、Binding FieldsProto.etc... 似乎没有任何效果。我知道我这样做可能完全错误,但是在绑定到 RESTful Web 服务的响应时,我找不到任何关于嵌套属性绑定的文档。请帮忙!!
亲切的问候, 有抱负的阿波罗
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。