如何使用 XAML 绑定在 ListView 中显示 List<int> 的值?
How do I display the values of a List<int> in a ListView using XAML binding?
我正在使用 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,以便它也显示值?
我认为你想做的事情太复杂了
<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>
应该可以解决问题
这看起来是为示例列表中的每个项目创建一个文本框
如果这不起作用那么问题很可能是您的数据上下文尚未设置并且绑定无法跟踪相对地址
你也应该尝试使用
一个 Observable collection
即
public ObservableCollection<int> sampleList { get ;} = new ObservableCollection<int>();
这是因为您应该更改列表的内容而不是列表本身,因此您需要 INotifyCollectionChanged 事件来通知绑定内容已更改
- 尝试使用
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>
我正在使用 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,以便它也显示值?
我认为你想做的事情太复杂了
<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>
应该可以解决问题
这看起来是为示例列表中的每个项目创建一个文本框 如果这不起作用那么问题很可能是您的数据上下文尚未设置并且绑定无法跟踪相对地址
你也应该尝试使用 一个 Observable collection
即
public ObservableCollection<int> sampleList { get ;} = new ObservableCollection<int>();
这是因为您应该更改列表的内容而不是列表本身,因此您需要 INotifyCollectionChanged 事件来通知绑定内容已更改
- 尝试使用
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>