WPF中关于ListBox绑定数据的问题
程序员文章站
2022-06-09 17:37:27
...
在定义ListBox的ItemSource绑定时,出现了初次绑定有数据,但是数据变化时视图没有更新的情况。
错误发生时代码如下:
//尝试一
private void binding(){
List<string> m_allpaths = new List<string>();
System.Windows.Data.Binding newBinding = new System.Windows.Data.Binding();
newBinding.Source = m_allpaths;
lsb1.SetBinding(System.Windows.Controls.ListBox.ItemsSourceProperty,newBinding);
}
//尝试二,定义了一个类,此类中有个字段getAllPath为List<string>类型
public class AllPaths : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private ObservableCollection<string> m_allpaths = new ObservableCollection<string>();
public ObservableCollection<string> getAllPaths
{
get { return m_allpaths; }
set
{
m_allpaths = value;
if (PropertyChanged != null)
{ this.PropertyChanged.Invoke(this,new PropertyChangedEventArgs("getAllPaths"));
}
}
}
}
private void binding(){
AllPath m_allpaths = new AllPath();
System.Windows.Data.Binding newBinding = new System.Windows.Data.Binding();
newBinding.Source = m_allpaths;
newBinding.Path = new PropertyPath("getAllPaths");
lsb1.SetBinding(System.Windows.Controls.ListBox.ItemsSourceProperty,newBinding);
}
发现尝试一中的m_allpaths和尝试二中的getAllPath进行添加时,ListBox的视图均为刷新。百度之后,了解到一个问题,就是对于List< T >这类泛型,视图层是不能够获取到其数据更新的。在comobox和listbox等空间中,其item都是多组字符,因此需要用到以下ObservableCollection< T >,msdn中有对ObservableCollection的介绍:http://msdn.microsoft.com/zh-cn/magazine/dd252944.aspx。
只要将尝试二中的List< string >改成ObservableCollection< string >,即可绑定,也可以参照下面的代码:
private ObservableCollection<T> _default = new ObservableCollection<T>();
public ObservableCollection<CardViewModel> DeafultPro
{
get { return _default; }
set
{
if (_default != value)
{
_default = value;
RaisePropertyChanged("DeafultPro");
}
}
}
推荐阅读
-
关于Oracle中sys、system和Scott用户下的数据库连接问题
-
关于VS2005中C#代码用F12转到定义时,总是显示从元数据的问题
-
关于MyBatis 查询数据时属性中多对一的问题(多条数据对应一条数据)
-
Android中的SQL查询语句LIKE绑定参数问题解决办法(sqlite数据库)
-
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
-
WPF数据模板中绑定事件不触发问题
-
关于小程序swiper组件中只有一条数据时的渲染问题
-
关于数据库设计中主键问题的思考
-
基于vue.js中关于下拉框的值默认及绑定问题
-
关于linux(ubuntu 18.04) 中idea操作数据库失败的问题