c# - 如何显示列表的值在使用 XAML 绑定的 ListView 中?
问题描述
我使用 Microsoft.Toolkit.Mvvm 库作为 MVVM 库。我的 C# 代码如下:
class SampleViewModel : ObservableObject
{
private List<int> _sampleList;
public List<int> sampleList
{
get => _sampleList;
set
{
SetProperty(ref _sampleList, value);
}
}
}
我试图用来显示所有值的 XAML 代码List<int>
是:
<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>
应该做的伎俩
这读作为 sampleList 中的每个项目创建一个文本框,如果这不起作用,那么问题很可能是您的 datacontext 尚未设置并且绑定无法跟踪相对地址
你也应该尝试使用Observable 集合
IE
public ObservableCollection<int> sampleList { get ;} = new ObservableCollection<int>();
这是因为您应该更改列表的内容而不是列表本身,因此您需要 INotifyCollectionChanged 事件来通知绑定内容已更改
推荐阅读
- uwp - 与 Hockey App 关联时,VSTS 构建失败
- multithreading - python3 ZipFile.extractall 提取一个空文件
- java - 创建自定义 LoggingContext(日志分离)
- windows - 如何知道其他人创建文件的时间
- url - Gerrit 时间搜索运算符在指定为秒时不起作用
- javascript - Semantic-UI:无法访问图标(“CORS 请求不是 http”)
- php - 依赖和条件验证不起作用
- visual-c++ - 当我用 C++ 编写宏时,它会出现“声明没有存储类型”之类的错误
- scala - 无法解决 circe 自定义解码器中的编译时错误
- angular - 角度形式数据不会附加