C# 添加元素后刷新ListView

C# 添加元素后刷新ListView,c#,data-binding,microsoft-metro,windows-runtime,C#,Data Binding,Microsoft Metro,Windows Runtime,我对Windows开发非常陌生,当然对Metro风格的应用程序开发更是陌生。我不确定我是否理解数据绑定是如何工作的 我有一份物品清单 private List<Expense> _expenses = new List<Expense>(); public List<Expense> Items { get { return this._expenses; } } 然后我显示它 <UserControl.Reso

我对Windows开发非常陌生,当然对Metro风格的应用程序开发更是陌生。我不确定我是否理解数据绑定是如何工作的

我有一份物品清单

private List<Expense> _expenses = new List<Expense>();
public List<Expense> Items
{
    get
    {
        return this._expenses;
    }
}
然后我显示它

<UserControl.Resources>
    <CollectionViewSource
        x:Name="itemsViewSource"
        Source="{Binding Items, Mode=TwoWay}"/>
</UserControl.Resources>

<ListView
    x:Name="itemListView"
    AutomationProperties.AutomationId="ItemsListView"
    AutomationProperties.Name="Items"
    Margin="120,0,0,60"
    ItemsSource="{Binding Source={StaticResource itemsViewSource}}"
    SelectionChanged="ItemListView_SelectionChanged"
    ItemTemplate="{StaticResource DefaultListItemTemplate}"/>

我希望
列表视图会自动刷新,因为我设置了
Mode=TwoWay
,但它没有。我是否误解了这个概念,列表无法刷新?否则,我会做错什么?

为了在更改集合后更新UI,您需要它来实现
INotifyCollectionChanged
。这将在发生更改时通知UI,并通过在更改顶部重新绑定UI来响应

不过,实现这个接口相当复杂。相反,您应该只使用
ObservableCollection
代替
List
,场景应该可以正常工作

private ObservableCollection<Expense> _expenses = new ObservableCollection<Expense>();
public ObservableCollection<Expense> Items
{
    get
    {
        return this._expenses;
    }
}
private observedcollection\u expenses=new observedcollection();
公共可观测收集项目
{
得到
{
退还此费用;
}
}

非常感谢。在同一主题上,当对象本身发生更改时如何通知?@Jonas对象本身必须实现
INotifyPropertyChanged
_data.Items.Add(new Expense
{
    Total = 100,
    When = new DateTime(2013, 6, 6),
    For = "Myself"
});
private ObservableCollection<Expense> _expenses = new ObservableCollection<Expense>();
public ObservableCollection<Expense> Items
{
    get
    {
        return this._expenses;
    }
}