MVVM ObservableCollection 不起作用
Posted
技术标签:
【中文标题】MVVM ObservableCollection 不起作用【英文标题】:MVVM ObservableCollection not working 【发布时间】:2018-08-04 17:10:41 【问题描述】: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】:您想将您的收藏绑定到ItemsSource
属性而不是DataContext
:
<ListBox
Name="listBox"
HorizontalAlignment="Left"
Margin="10,10,0,10"
Width="321"
ItemsSource="Binding Strings"/>
【讨论】:
太好了,谢谢。这就是我一直在监督的。大赞了:)以上是关于MVVM ObservableCollection 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
WPF/MVVM中ObservableCollection的双向绑定和过滤
Datagrid 不显示来自 ObservableCollection 的 MVVM 中的数据
ObservableCollection CollectionChanged 在 WPF MVVM 中没有帮助