c# - 将其 .itemssource 设置为列表但在我将项目添加到列表时不更新的 ListView
问题描述
这听起来很简单,但实际上花了我几个小时但仍未完成。这是我的 C# 代码:
public ItemEditor() {
InitializeComponent();
ListView_Item.ItemsSource = TestList;
}
List<Item> TestList = new List<Item>();
private void MenuItem_AddNewItem_Click(object sender, RoutedEventArgs e) {
Item newItem = new Item();
TestList.Add(newItem);
newItem.Name = "new item";
}
当执行 MenuItem_AddNewItem_Click 函数时,列表视图永远不会更新。我想不通怎么会是这样。这是我的 xaml 代码:
<Grid DockPanel.Dock="Left">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="200"></ColumnDefinition>
</Grid.ColumnDefinitions>
<ListView x:Name="ListView_Item" Grid.Column="0" ContextMenu="{StaticResource ContextMenu_ListView_Item}" SelectionMode="Single">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}"></TextBlock>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<GridSplitter Grid.Column="0" Width="5"/>
<StackPanel Grid.Column="1" Orientation="Vertical">
<DockPanel>
<TextBlock>Name:</TextBlock>
<TextBox></TextBox>
</DockPanel>
</StackPanel>
<GridSplitter Grid.Column="1" Width="5"/>
<Grid Grid.Column="2"></Grid>
</Grid>
谁能帮我?我查看了很多网页,有类似的情况,但没有一个可以帮助我解决我的问题。
解决方案
正如对问题的评论中提到的,使用 ObservableCollection 是实现这一目标的最简单方法。这就是该系列的设计目的。如果您需要修改现有的自定义集合类型而不是使用 ObservableCollection,那么您需要实现 INotifyPropertyChanged 和 INotifyCollectionChanged。
推荐阅读
- matlab - 创建 1000x252 路径模拟
- python - 有没有办法修复pdfminer中的行对齐?
- c++ - Qml listview将新行添加到模型中的子向量
- python - 是否可以训练 spacy 来识别任何随机的组织名称
- django - Django 在电子邮件模板中请求用户名以及单击后如何将对象移动到接受或拒绝文件夹
- ios - 在 RxSwift 中处理绑定时如何不使观察者无效?
- spring - 启动后如何减少eureka CPU消耗?
- typo3 - 前端页面宽度pits_downloadcenter扩展返回错误
- powershell - 将数组动态分配给哈希中的键时出错
- spring - Thymeleaf 一次性向 URL 添加多个参数