WPF里关于列表控件的数据绑定后的显示问题(在线等)一个wpf窗体上,2个按钮1个ComboBox和1个ListBox:C# code
WPF里关于列表控件的数据绑定后的显示问题(在线等)
一个wpf窗体上,2个按钮1个ComboBox和1个ListBox:
C# codeusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Shapes;using System.Collections;namespace comboboxDEMO{ /// <summary> /// Window2.xaml 的交互逻辑 /// </summary> public partial class Window2 : Window { ArrayList myAL; public Window2() { InitializeComponent(); myAL = new ArrayList(); myAL.Add("Hello"); myAL.Add("World"); myAL.Add("!"); comboBox1.ItemsSource = myAL; myAL.Add("2"); myAL.Add("3"); myAL.Add("4"); listBox1.ItemsSource = myAL; } private void button1_Click(object sender, RoutedEventArgs e) { myAL.Add("5"); myAL.Add("6"); myAL.Add("7"); } private void button2_Click(object sender, RoutedEventArgs e) { myAL.Add("15"); myAL.Add("16"); myAL.Add("17"); } }}
先说ComboBox,下拉部分数据绑定了myAL,如果程序运行后,我先去点击下拉列表,则正常显示6项。然后我添加后,比如点击其他按钮,下拉列表则还是现实6项,但是通过方向键能选中到新的3项,是不是下拉列表高度设置的问题?在combobox的属性里,只有一个最大列表高度,其他没找到能设置下拉列表高度值的。
同样,程序运行后,我先不去点击下拉列表,先进行增加myAL项,比如点击个按钮,再去点击ComboBox的下拉列表,则能正常显示9项。
感觉下来就是wpf下的也就是System.Windows.Controls.ComboBox,在一次显示下拉列表后,他就内部设定了下拉列表的长度,之后再修改下拉项,长度不会随之改变。
再来看listbox,这个直接就比较干脆,运行后,再怎么修改myAL,都不会在显示上有新增,应该是在窗体构造完毕后,直接就决定了长度吧?也不太清楚。
有人能解决这个列表控件的下拉显示问题么?
[解决办法]貌似要对集合数据源(即myAL)实现 ObservableCollection 接口才能自动更新
参考
http://www.cnblogs.com/DragonInSea/archive/2009/05/26/1490122.html
[解决办法]1. "是不是下拉列表高度设置的问题?"
不是高度设置问题,Combox可以自动更新,增加宽度和高度的,是由于你的数据源更新后,前台没有接到通知造成的。
2. ListBox的问题;
可以这样试试。
ListBox.ItemsSource = LoadListBoxData();
private ArrayList LoadListBoxData()
{
ArrayList itemsList = new ArrayList();
itemsList.Add("111");
itemsList.Add("222");
itemsList.Add("333");
return itemsList;
}
[解决办法]方法1:把ArrayList 换成 ObservableCollection<>
方法2:在事件里面 myAL.Add("17");之后,调用comboBox1.Items.Refreash();
================
方法2很直接,就是更新显示。
方法1中的ObservableCollection<>,此类事可被监视的集合,所以他的内容变了会抛出消息,界面的
comboBox1会自动捕获,然后自动刷新显示,这事wpf属性系统自己内部沟通的。