代码之家  ›  专栏  ›  技术社区  ›  Bob_Foo

MVVM ObservableCollection不工作

  •  0
  • Bob_Foo  · 技术社区  · 6 年前

    ObservableCollection 未更新UI。

    这是我的代码:

    using System;
    using System.Collections.ObjectModel;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WpfApp1.ViewModels
    {
        public class MainViewModel
        {
            private ObservableCollection<string> strings;
    
            public MainViewModel()
            {
                strings = new ObservableCollection<string>();
                Add();
            }
    
            public async void Add()
            {
                for (int i = 0; i < 3; i++)
                {
                    await Task.Delay(1000);
                    Strings.Add("Item Added");
                    Debug.WriteLine("Item Added");
                }
            }
    
            public ObservableCollection<string> Strings
            {
                get { return strings; }
                set { strings = value; }
            }
        }
    }
    

    以及视图:

    <Window x:Class="WpfApp1.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"                                  
        xmlns:local="clr-namespace:WpfApp1"
        xmlns:ViewModels="clr-namespace:WpfApp1.ViewModels"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <ViewModels:MainViewModel/>
    </Window.DataContext>
    
    <Grid>
        <ListBox 
            Name="listBox"
            HorizontalAlignment="Left"
            Margin="10,10,0,10"
            Width="321"
            DataContext="{Binding Strings}"
            />
    </Grid>
    </Window>
    

    我已经试了几个小时来让这个最小的例子起作用。我以前使用过MVVM,但现在我不知道缺少了什么。据我所知,ObservableCollections已经实现了 INotifyPropertyChanged ,因此我的MainViewModel不需要实现该接口(此时)。 也许你可以帮我,谢谢:。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Karolis Kajenas    6 年前

    您要将收藏绑定到 ItemsSource 属性而不是 DataContext :

    <ListBox 
        Name="listBox"
        HorizontalAlignment="Left"
        Margin="10,10,0,10"
        Width="321"
        ItemsSource="{Binding Strings}"/>