首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

WPF里关于列表控件的数据绑定后的显示有关问题()

2012-11-06 
WPF里关于列表控件的数据绑定后的显示问题(在线等)一个wpf窗体上,2个按钮1个ComboBox和1个ListBox:C# code

WPF里关于列表控件的数据绑定后的显示问题(在线等)
一个wpf窗体上,2个按钮1个ComboBox和1个ListBox:

C# code
using 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属性系统自己内部沟通的。

热点排行