我正在尝试绑定一个名为"Name“的字符串属性,该属性来自一个列表,该列表由我在listView中绑定到的对象持有。
public class MyObject
{
public List<Object> Objects{ get; set; }
public string Description {get; set; }
public string StartDate {get; set; }
public string EndDate {get ;set; }
public string Type {get; set; }
public MyObject()
{
Objects = new List<Object>();
}
}
public class Object
{
public string Name { get; set; }
public int? Id { get; set; }
public int? Order { get; set; }
}
在我的页面中,我从call async中设置了ListView.ItemSource
,这是一个List<MyObject>
var itemSource = listOfMyObject;
我有一台DataTemplate
public class Cell : ViewCell
{
private void SetBindings()
{
_objectLabel.SetBinding(Label.TextProperty, "Object.Name");
_descriptionLabel.SetBinding(Label.TextProperty, "Description");
_dateStartLabel.SetBinding(Label.TextProperty, "StartDate");
_dateEndLabel.SetBinding(Label.TextProperty, "EndDate");
_typeOfRequest.SetBinding(Label.TextProperty, "Type");
}
}
所以所有的东西都被正确绑定了,除了在我的ListView中没有显示的Object.Name
。
我知道它不能工作,因为我的对象是一个List< T>,并且没有Name属性。好吧,但是我怎么才能实现我想要的呢?而且我不想只对一个标签使用嵌套的listView。
我已经看到,我可以使用以下内容获得数据的扁平列表:listOfMyObject.SelectMany(obj => obj.Objects)
但不知道该怎么做。那么如何绑定MyObject列表中对象的属性呢?
谢谢
发布于 2017-10-05 20:25:18
public class ListToStringConverter : IValueConverter
{
#region IValueConverter implementation
public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value!= null) {
List<Object> temp = (List<Object>)value;
if(temp.Count == 0 )
return "";
string myString = "";
foreach(Object obj in temp){
myString += obj.Name + ",";
}
return myString;
}
return "";
}
public object ConvertBack (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException ();
}
#endregion
}
https://stackoverflow.com/questions/46583924
复制相似问题