wpf中关于datacontext的问题

leogrim 2016-03-25 02:38:51
先看代码:

public class ViewModel1
{
public ObservableCollection<Student> StudentList { get; set; }
public ICommand ClickCommand
{
get
{
return new RelayCommand(o =>
{
StudentList = new ObservableCollection<Student>();
for(int i=0;i<3;i++)
{
Student stu = new Student { Name = "a" };
StudentList.Add(stu);
}
});
}
}
public ViewModel1()
{

}
}

在viewmodel中定义了一个StudentList集合和一个Click命令,在命令中给StudentList添加数据,

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new ViewModel1();
}
}

这里指定了datacontext,在界面上绑定:

<Grid>
<StackPanel >
<Button Content="Click" Command="{Binding ClickCommand}"></Button>
<ListBox ItemsSource="{Binding StudentList}" DisplayMemberPath="Name"></ListBox>
</StackPanel>
</Grid>

当我点击按钮的时候,执行了命令,但是ListBox中却不会更新数据,如果我在ViewModel的构造函数中去执行

StudentList = new ObservableCollection<Student>();

那么点击按钮的时候就会更新数据到页面上,请问是为什么?
...全文
373 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
leogrim 2016-03-28
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
因为你的 public ObservableCollection<Student> StudentList { get; set; } 没有进行“更改通知”。 类似: private ObservableCollection<A> _aList = new ObservableCollection<A>(); public ObservableCollection<A> AList { get { return _aList; } set { _aList= value; OnChangeProperty("AList "); } }
ObservableCollection这个类型本来就实现了通知功能的
leogrim 2016-03-28
  • 打赏
  • 举报
回复
已经解决了,可以在viewmodel的构造方法里面初始化绑定的集合就没问题了,因为定义的集合是普通的属性,如果没有在绑定之前初始化,当在执行了命令的时候再初始化,那么原来绑定的数据是指向空地址的
exception92 2016-03-25
  • 打赏
  • 举报
回复
因为你的 public ObservableCollection<Student> StudentList { get; set; } 没有进行“更改通知”。 类似: private ObservableCollection<A> _aList = new ObservableCollection<A>(); public ObservableCollection<A> AList { get { return _aList; } set { _aList= value; OnChangeProperty("AList "); } }

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧