Wpf中ListView的数据绑定的更新同步问题(后台绑定数据更新)

huangjia2107 2012-10-11 07:45:40

public partial class MainWindow : Window
{
public class Customer:INotifyPropertyChanged //定义的类,用于添加到List
{
public string name;
public string imageUrl;
public string sex;
public string age;

public string Name
{
get { return name; }
set { name = value; OnPropertyChanged(new PropertyChangedEventArgs("Name")); }
}
public string ImageUrl
{
get { return imageUrl ;}
set { imageUrl = value; OnPropertyChanged(new PropertyChangedEventArgs("ImageUrl")); }
}
public string Sex
{
get { return sex;}
set { sex = value; OnPropertyChanged(new PropertyChangedEventArgs("Sex")); }
}
public string Age
{
get { return age;}
set { age = value; OnPropertyChanged(new PropertyChangedEventArgs("Age")); }
}

#region INotifyPropertyChanged 成员

public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
PropertyChanged(this, e);
}
}
#endregion
}
List<Customer> listCustomer = new List<Customer>(); //数据源
public MainWindow() //构造函数
{
this.InitializeComponent();
listCustomer.Add(new Customer() { ImageUrl = "Pic/P_1.png", Name = "hehe1", Sex = "男", Age = "12" });
listview.DataContext = listCustomer; //此处添加绑定
}

效果如图:


上图足以证明绑定成功!!!但问题来了。。。。。。。。。。。。。。。。。。。。。
有如下按钮事件


private void button1_Click(object sender, RoutedEventArgs e)
{
listCustomer.Add(new Customer() { ImageUrl = "Pic/P_5.png", Name = "hehe2", Sex = "女", Age = "16" });
}

意思就是:再通过按钮动态添加一个新的纪录
结果:经测试,listCustomer中确实多了一个记录,但程序界面中却没有更新,也就是没有达到我想要的如下效果:

前提是:我已经在xaml文件中确确实实添加了绑定,请问这个如何解决???还需要什么代码吗?

难道是绑定了listview.DataContext = listCustomer; 之后的改变就不行了???还是学艺不精。。。望高手指教,有代码
帮忙解决最好不过!!!


...全文
4531 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
craigtao 2015-01-30
  • 打赏
  • 举报
回复
能分享一下怎么弄的?
_周星星 2013-05-23
  • 打赏
  • 举报
回复
学习了 我终于找到答案了
Jeece_JX 2013-04-02
  • 打赏
  • 举报
回复
ObservableCollection<T> 这个是实现了INotifyPropertyChanged 这个接口的 而 List<T> 并没有实现这个接口
Jeece_JX 2013-04-02
  • 打赏
  • 举报
回复
List<Customer> listCustomer = new List<Customer>(); List<Customer> ListCustomer //数据源 { get { return listCustomer; } set { listCustomer = value; OnPropertyChanged(new PropertyChangedEventArgs("ListCustomer")); } } public MainWindow() //构造函数 { this.InitializeComponent(); listCustomer.Add(new Customer() { ImageUrl = "Pic/P_1.png", Name = "hehe1", Sex = "男", Age = "12" }); listview.DataContext = ListCustomer; //此处添加绑定 } ------------------------------------------------------------------------------------- private void button1_Click(object sender, RoutedEventArgs e) { List<Customer> new_listCustomer = new List<Customer>(listCustomer.ToArray()); new_listCustomer.Add(new Customer() { ImageUrl = "Pic/P_5.png", Name = "hehe2", Sex = "女", Age = "16" }); ListCustomer = new_listCustomer; }
songyingwu 2013-01-13
  • 打赏
  • 举报
回复
楼主,我也遇上相同问题,好几天了还没搞定。能不能帮忙指点一下QQ 1078395977
chengjianjun1987 2012-11-01
  • 打赏
  • 举报
回复
楼主的情况我也遇到过!其实已经绑定上了,但是不知道为什么它不会及时显现,如果你在最大化或最小化一下窗口(或刷新一下界面),数据就会显现出来了! 最后还是用的ObservableCollection<T> 集合才可以实时显示!目前也不知道为什么List<>集合有这个问题!
yiwq1987 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:

用 ObservableCollection<T> 类 或 BindingList<T> 类 代替 List 类


可以说下这个的优势在哪吗
[/Quote]

看ObservableCollection<T>在帮助文档里的说明,这个提供自动更新数据的接口,可以自动向控件发送更新消息
huangjia2107 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

用 ObservableCollection<T> 类 或 BindingList<T> 类 代替 List 类
[/Quote]

可以说下这个的优势在哪吗
iyomumx 2012-10-11
  • 打赏
  • 举报
回复
huangjia2107 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

你需要在xaml代码中ListView控件绑定的时候 指定Mode=TwoWay
[/Quote]

已经指定了的,不是这儿的问题,
首先,已经定义了只有一个”项“的集合
然后,将该集合作为数据源通过listview.DataContext = listCustomer加以绑定,界面只显示这一个“项”
最后,问题是:我通过后台代码又给那个集合新添加了一个“项”,也就是说此时,那个集合有两个"项"了,但界面中没有自动将新添加的项更新出来。。。也就是界面显示没有同数据源数据同步
那么。。。这个怎么解决呢???
暖枫无敌 2012-10-11
  • 打赏
  • 举报
回复
你需要在xaml代码中ListView控件绑定的时候 指定Mode=TwoWay
huangjia2107 2012-10-11
  • 打赏
  • 举报
回复
高手速来啊。。。UP Up Up

111,075

社区成员

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

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

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