WPF Datagrid NotifyOfPropertyChange不起作用

时间:2014-07-23 09:15:03

标签: c# wpf datagrid caliburn.micro inotifypropertychanged

我有两个数据网格和一个按钮的视图。 enter image description here 第一个datagrid包含一个文章列表,第二个是空的,用户按下一个按钮后会在这个datagrid中添加所选的文章。 我在这个项目中添加了Caliburn.Micro以使用“Screen”。问题是,如果我按添加文章按钮,没有任何更改,数据网格始终为空。 这是XAML代码:

<DataGrid temsSource="{Binding Articles}"
     AutoGenerateColumns="False" HorizontalAlignment="Left" CanUserAddRows="False" >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
        <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
        <DataGridTextColumn Header="Price" Binding="{Binding Price}" />
    </DataGrid.Columns>
</DataGrid>

这是ViewModel代码:

public class ShellViewModel : Screen
{
    public List<Article> _articles;
    public List<Article> Articles
    {
        get { return _articles; }
        set


{
        if (value != _articles)
        {
            _articles = value;
            NotifyOfPropertyChange("Articles");
        }
    }
}


public void AddArticle()
{            
    Articles.Add(new Article 
    { 
        Id = ArticleSelected.Id,
        Name = ArticleSelected.Name,
        Price = ArticleSelected.Price,
    });

    NotifyOfPropertyChange("Articles");            
}   

}

哪里错了?

2 个答案:

答案 0 :(得分:3)

问题不是因为财产通知,而是收集的更改未通知,因此使用ObservableCollection<T>可能会解决您的问题

public ObservableCollection<Article> _articles;
public ObservableCollection<Article> Articles
{
....

答案 1 :(得分:2)

List<Article> _articles更改为ObservableCollectiont<Article> _articles,如果使用ObservableCollection,则无论何时修改列表,都会引发CollectionChanged事件 - 这将指示WPF绑定更新。查看INotifyCollectionChanged

public ObservableCollection<Article> _articles;
public ObservableCollection<Article> Articles