如何使用 XAML 绑定在 ListView 中显示 List<int> 的值?
Posted
技术标签:
【中文标题】如何使用 XAML 绑定在 ListView 中显示 List<int> 的值?【英文标题】:How do I display the values of a List<int> in a ListView using XAML binding? 【发布时间】:2021-08-21 11:14:45 【问题描述】:我使用 Microsoft.Toolkit.Mvvm 库作为 MVVM 库。我的 C# 代码如下:
class SampleViewModel : ObservableObject
private List<int> _sampleList;
public List<int> sampleList
get => _sampleList;
set
SetProperty(ref _sampleList, value);
我试图用来显示List<int>
的所有值的 XAML 代码是:
<ListView x:Name="mylistview" ItemsSource="x:Bind ViewModel.sampleList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<ItemsControl ItemsSource="Binding">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="x:Int32">
<TextBlock Text="x:Bind" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
更新列表时,创建了元素,但不显示 int 的值,只存在一个空行。如果我使用以下内容,我可以显示该值:
<TextBlock Text="x:Bind ViewModel.sampleList[0], Mode=TwoWay, UpdateSourceTrigger=PropertyChanged"/>
我应该如何更改 ListView,以便它也显示值?
【问题讨论】:
【参考方案1】:我认为你想要做的事情过于复杂
<ListView x:Name="mylistview" ItemsSource="x:Bind ViewModel.sampleList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged">
<ListView.ItemTemplate>
<DataTemplate x:DataType="x:Int32">
<TextBlock Text="x:Bind" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
应该做的伎俩
这读作为 sampleList 中的每个项目创建一个文本框 如果这不起作用,那么问题很可能是您的数据上下文尚未设置并且绑定无法跟踪相对地址
你也应该尝试使用 Observable collection
即
public ObservableCollection<int> sampleList get ; = new ObservableCollection<int>();
这是因为您应该更改列表的内容而不是列表本身,因此您需要 INotifyCollectionChanged 事件来通知绑定内容已更改
【讨论】:
当我也回复了另一个答案时,简化的代码会引发 DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION。我将尝试使用 ObservableCollection-
尝试使用
ObservableCollection<int>
而不是List<int>
您在 XAML 中的绑定非常复杂。请尝试以下方法:
<ListView x:Name="mylistview" ItemsSource="x:Bind ViewModel.sampleList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged">
<ListView.ItemTemplate>
<DataTemplate>
<Label Content="x:Bind" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
【讨论】:
带有 List以上是关于如何使用 XAML 绑定在 ListView 中显示 List<int> 的值?的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin 表单 ListView ItemTapped/ItemSelected 命令绑定在 XAML
Xamarin表单ListView ItemTapped / ItemSelected在XAML上绑定命令
选择器 ItemSource 值未绑定在 XAML ListView 中