首页 > 解决方案 > 将其 .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>

谁能帮我?我查看了很多网页,有类似的情况,但没有一个可以帮助我解决我的问题。

标签: c#.netwpf

解决方案


正如对问题的评论中提到的,使用 ObservableCollection 是实现这一目标的最简单方法。这就是该系列的设计目的。如果您需要修改现有的自定义集合类型而不是使用 ObservableCollection,那么您需要实现 INotifyPropertyChanged 和 INotifyCollectionChanged。


推荐阅读