C# 仅显示一项的列表框

C# 仅显示一项的列表框,c#,.net,wpf,xaml,listbox,C#,.net,Wpf,Xaml,Listbox,我有一个列表框和一个带字符串的类。每次用户单击应用程序中的“添加”按钮时,我都会创建一个新的类实例,并将其添加到绑定到列表框的列表中。第一次单击“添加”按钮时,列表框将显示第一项,但下一次不会显示两项 XAML-这是列表框: <ListBox Name="ListBox_BinsRegion" Height="181" Margin="233,16,6,94" Width="253" Background="Transparent" BorderThickness="1" BorderBr

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

XAML-这是
列表框

<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;
    }
List List_ListBoxItems=newlist();
私有无效按钮\u添加\u单击(对象发送者,路由目标)
{
Class_ListViewItem项=新Class_ListViewItem();
item.WH=this.comboBox_WarehouseBinesRegionDefinition。选择EdItem.ToString();
item.XXFrom=textBox_XXFrom.Text;
item.XXTo=textBox_XXTo.Text;
item.YYFrom=textBox_YYFrom.Text;
item.YYTo=textBox_YYTo.Text;
item.Z=文本框_ZFrom.Text;
列出列表框项目。添加(项目);
ListBox\u BinsRegion.DataContext=List\u ListBoxItems;
}

我的错误在哪里?

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

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

使用ObservableCollection而不是列表。这将自动更新绑定,不需要下面的行(这可能有点慢)


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

当您第二次分配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);
}
ObservableCollection列表_ListBoxItems=new ObservableCollection();
公共控制(){
初始化组件();
ListBox\u BinsRegion.DataContext=List\u ListBoxItems;
}
私有无效按钮\u添加\u单击(对象发送者,路由目标)
{
Class_ListViewItem项=新Class_ListViewItem();
item.WH=this.comboBox_WarehouseBinesRegionDefinition。选择EdItem.ToString();
item.XXFrom=textBox_XXFrom.Text;
item.XXTo=textBox_XXTo.Text;
item.YYFrom=textBox_YYFrom.Text;
item.YYTo=textBox_YYTo.Text;
item.Z=文本框_ZFrom.Text;
列出列表框项目。添加(项目);
}

您可以按照其他人的建议执行操作(使用ObservableCollection而不是列表),也可以查询绑定的依赖项属性,找到相应的绑定并手动刷新


我会选择ObservaleCollection:)

如果他删除了DataContext行,则ListBox将不会有任何items.WPF更新,这将基于对集合激发的CollectionChanged事件。如果您的集合未实现INotifyCollectionChanged接口,则WPF集合将不会动态更新。如果这解决了问题,请将其标记为答案。谢谢我刚才做的是-if(List\u ListBoxItems.Count==1)ListBox\u BinsRegion.DataContext=List\u ListBoxItems;ListBox_BinsRegion.Items.Refresh();现在它可以工作了……如果你喜欢这样做而不是仅仅使用一个可观察的集合,那么这也可以。他仍然需要在列表框上设置数据上下文。没有它,项源绑定到集合将无法工作。是的,但他不需要每次向列表框添加内容时都这样做。
ListBox_BinsRegion.DataContext = List_ListBoxItems;
ListBox_BinsRegion.DataContext = List_ListBoxItems;
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);
}