我正在使用XF列表视图,并希望绑定整个对象,然后使用转换器根据某些条件格式化数据,但对象绑定在XF中不再起作用。测试在XF 2.5.0.91635和android支持库26.1.0.1上进行。首先,当不使用项目模板时,列表视图会正确呈现,尽管内容显示默认对象字符串:
<ListView x:Name="lv"></ListView>
但是在使用项目模板时,没有显示任何内容,尽管项目数量确实已添加到列表视图中,并且项目选择事件已正确触发。此外,调试输出以下消息:
<ListView x:Name="lv">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label Text="{Binding}"></Label>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
[0:] Binding: Models.DataItem can not be converted to type 'System.String'
[0:] Binding: Models.DataItem can not be converted to type 'System.String'
[0:] Binding: Models.DataItem can not be converted to type 'System.String'
[0:] Binding: Models.DataItem can not be converted to type 'System.String'
[0:] Binding: Models.DataItem can not be converted to type 'System.String'
当我将转换器添加到绑定表达式时,convert函数总是在其参数中接收null。
添加绑定代码:
List<DataItem> list = new List<DataItem>();
for(int i = 0; i < 10; i++)
{
list.Add(new DataItem
{
N = "L " + i.ToString(),
C = i + 1,
});
}
lv.ItemsSource = list;
答案 0 :(得分:1)
当我将转换器添加到绑定表达式时,convert函数总是在其参数中接收null。
如果要绑定到整个对象,则需要像这样修改public class DataItem
{
public String N { get; set; }
public int C { get; set; }
//use an Item property to reference itself
public DataItem Item { get { return this; } }
}
:
ListView
然后你可以在<ListView x:Name="lv" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label Text="{Binding Item,Converter={StaticResource YourConverter}}" ></Label>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
和转换器中一起使用它
Iterable
答案 1 :(得分:0)
正确的绑定方式是“将集合绑定到ListView”并为列表提供ItemSource
:
例如:
private ObservableCollection<Models.DataItem> _dataList;
public ObservableCollection<Models.DataItem> DataList
{
get { return _dataList; }
set
{
_dataList = value;
RaisePropertyChanged(() => DataList); // you can use your own property notification mechanism here.
}
}
然后将绑定上下文设置为ViewModel:
<ListView ItemsSource="{Binding DataList}" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label Text="{Binding . }" />
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
或者,如果您想显示以下DataItem
:
public class Model.DataItem
{
public string Property1 {get; set; }
public string Property2 {get; set; }
public string Property3 {get; set; }
}
使用
<ViewCell>
<Label Text="{Binding Property1 }" />
<Label Text="{Binding Property2 }" />
<Label Text="{Binding Property3 }" />
</ViewCell>
希望这有帮助