我已经尝试将对象列表绑定到listview
很长一段时间,但是虽然它按预期工作但我不需要编写itemtemplate(ObservableCollection<string>
例如),它不适用于我希望itembinding
到列表中对象的字段的列表:
MainPage.xaml.cs中:
ExampleList = new ObservableCollection<ExampleItem>()
{
new ExampleItem() {Showing = "Item 1"},
new ExampleItem() {Showing = "Item 2"}
};
ListView.ItemsSource = ExampleList;
MainPage.xaml中:
<ListView x:Name="ListView">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Showing}" TextColor="White"></TextCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
虽然列表项存在(!),但行中的文本不会显示: Binding Result
我已经尝试过这个解决方案,结果是一样的:Xamarin ListView not displaying any data
解答: 似乎绑定不能(完全)使用字段,变量需要属性!
答案 0 :(得分:2)
确保ItemsSource中的项实现INotifyPropertyChanged,并且您绑定的每个属性的setter触发PropertyChanged事件。
除了在ItmsSource的属性设置器上触发PropertyChanged之外。
答案 1 :(得分:1)
您需要设置ItemsSource以将ObservableCollection绑定到ListView
<ListView ItemsSource="{Binding ExampleList}">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Showing}" TextColor="White" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
还要记住,在使用Xamarin.Forms时,最好遵循MVVM模式。您应该在ViewModel类中使用ObservableCollection,并将其设置为View上的BindingContext
编辑:ObservableCollection似乎调用OnPropertyChange来更新Add方法的UI。只需在设置ItemsSource后将项添加到集合中。那应该是诀窍
ExampleList = new ObservableCollection<ExampleItem>();
ListView.ItemsSource = ExampleList;
ExampleList.Add(new ExampleItem() {Showing = "Item 1"});
ExampleList.Add(new ExampleItem() {Showing = "Item 2"});
答案 2 :(得分:0)
如评论中所述“绑定不适用于字段,它需要属性”。我是xamarin的新手,我很努力。但那是明确答案。
答案 3 :(得分:0)
此问题是旧问题,已经得到很好解决。 但是您也可以通过XAML设置ItemSource。 通过这样做:
<ListView x:Name="ListView" ItemsSource="{Binding ExampleList}">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Showing}" TextColor="White"></TextCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这可以帮助避免此类问题?
在此处查看更多信息:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/listview/data-and-databinding
我希望我会有所帮助?