我有两个数据网格和一个按钮的视图。 第一个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");
}
}
哪里错了?
答案 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