ListBox只显示一个项目

时间:2011-06-22 12:29:18

标签: c# .net wpf xaml listbox

我有一个ListBox和一个带字符串的类。每次用户单击应用程序中的添加按钮时,我都会创建该类的新实例,并将其添加到绑定到ListBox的列表中。我第一次点击添加按钮时,列表框会显示第一个项目,但下次没有显示两个项目。

XAML - 这是ListBox

<ListBox Name="ListBox_BinsRegion" Height="181" Margin="233,16,6,94" Width="253" Background="Transparent" BorderThickness="1" BorderBrush="Black" ScrollViewer.VerticalScrollBarVisibility="Auto" ItemsSource="{Binding}"/> 

背后的代码:

List<Class_ListViewItem> List_ListBoxItems = new List<Class_ListViewItem>();

 private void Button_Add_Click(object sender, RoutedEventArgs e)
    {
        Class_ListViewItem item = new Class_ListViewItem();
        item.WH = this.comboBox_WareHouseBinsRegionDefinition.SelectedItem.ToString();
        item.XXFrom = textBox_XXFrom.Text;
        item.XXTo = textBox_XXTo.Text;
        item.YYFrom = textBox_YYFrom.Text;
        item.YYTo = textBox_YYTO.Text;
        item.Z = textBox_ZFrom.Text;

        List_ListBoxItems.Add(item);

        ListBox_BinsRegion.DataContext = List_ListBoxItems;
    }

我的错误在哪里?

5 个答案:

答案 0 :(得分:6)

WPF不知道您的收藏何时发生变化。问题出在这里:

List<Class_ListViewItem> List_ListBoxItems = new List<Class_ListViewItem>();

您需要将列表更改为

ObservableCollection<Class_ListViewItem> List_ListBoxItems = new ObservableCollection<Class_ListViewItem>();

ObservableCollection(System.Collections.ObjectModel)在更改集合时抛出一个事件,以便WPF可以更新列表框。

此外,您可以删除以下行,或将其移动到控件的构造函数中。

ListBox_BinsRegion.DataContext = List_ListBoxItems;

答案 1 :(得分:2)

第二次分配DataContext时,技术上不会改变。这是因为您将其分配给同一个集合。你应该做这样的事情:

ObservableCollection<Class_ListViewItem> List_ListBoxItems = new ObservableCollection<Class_ListViewItem>();

public YourControl() {
    InitializeComponent();
    ListBox_BinsRegion.DataContext = List_ListBoxItems;
}

private void Button_Add_Click(object sender, RoutedEventArgs e)
{
    Class_ListViewItem item = new Class_ListViewItem();
    item.WH = this.comboBox_WareHouseBinsRegionDefinition.SelectedItem.ToString();
    item.XXFrom = textBox_XXFrom.Text;
    item.XXTo = textBox_XXTo.Text;
    item.YYFrom = textBox_YYFrom.Text;
    item.YYTo = textBox_YYTO.Text;
    item.Z = textBox_ZFrom.Text;

    List_ListBoxItems.Add(item);
}

答案 2 :(得分:1)

您不应更改控件的DataContext,而是将绑定设置为List_ListBoxItems并使其成为公共属性,并使用ObservableCollection或BindableCollection而不是list

答案 3 :(得分:0)

使用ObservableCollection&lt;&gt;而不是List&lt;&gt;。这将自动更新绑定,不需要以下行(可能有点慢)

ListBox_BinsRegion.DataContext = List_ListBoxItems;

答案 4 :(得分:0)

您可以执行其他人已经建议的操作(使用ObservableCollection而不是List) - 或者您可以查询绑定的依赖项属性并找到相应的Binding并手动刷新它。

我会选择ObservableCollection:)