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

Maths_bai 2009-10-14 01:11:12
一个wpf窗体上,2个按钮1个ComboBox和1个ListBox:
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,都不会在显示上有新增,应该是在窗体构造完毕后,直接就决定了长度吧?也不太清楚。

有人能解决这个列表控件的下拉显示问题么?
...全文
761 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dotnet90 2012-10-26
  • 打赏
  • 举报
回复
对头,我就是这么解决的
keko 2010-04-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qq124493482 的回复:]

方法1:把ArrayList 换成 ObservableCollection<>
方法2:在事件里面 myAL.Add("17");之后,调用comboBox1.Items.Refreash();

================
方法2很直接,就是更新显示。
方法1中的ObservableCollection<>,此类事可被监视的集合,所以他的内容变了会抛出消息,界面的
com……
[/Quote]
正解!
qq124493482 2010-03-29
  • 打赏
  • 举报
回复
问题所在:后面的数据源myAL更新了,而前面的comboBox1没有收到更新显示的通知。
qq124493482 2010-03-29
  • 打赏
  • 举报
回复
方法1:把ArrayList 换成 ObservableCollection<>
方法2:在事件里面 myAL.Add("17");之后,调用comboBox1.Items.Refreash();

================
方法2很直接,就是更新显示。
方法1中的ObservableCollection<>,此类事可被监视的集合,所以他的内容变了会抛出消息,界面的
comboBox1会自动捕获,然后自动刷新显示,这事wpf属性系统自己内部沟通的。
it民工1 2010-03-29
  • 打赏
  • 举报
回复
jv9 2009-10-16
  • 打赏
  • 举报
回复
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;

}
carl_he 2009-10-14
  • 打赏
  • 举报
回复
貌似要对集合数据源(即myAL)实现 ObservableCollection 接口才能自动更新

参考
http://www.cnblogs.com/DragonInSea/archive/2009/05/26/1490122.html

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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