WPF ListBox绑定更新

mmv*_*sbg 1 c# wpf xaml binding listbox

我是WPF的新手,我只是设法将特定类项的列表绑定到ListBox.ListBox现在成功显示它们.这是一些代码,首先是类:

public class OrderItem
{
    public int Quantity { get; set; }
    public string Name { get; set; }
    public Double Price { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

一些虚拟数据和绑定,都发生在主程序的构造函数中:

List<OrderItem> currentOrderItems = new List<OrderItem>();
        currentOrderItems.Add(new OrderItem() { Quantity = 5, Name = "Test", Price = 5 });
        currentOrderItems.Add(new OrderItem() { Quantity = 15, Name = "Test test", Price = 6.66 });
        currentOrderItems.Add(new OrderItem() { Quantity = 1, Name = "Test 3", Price = 15.88 });
        listOrderItems.ItemsSource = currentOrderItems;
Run Code Online (Sandbox Code Playgroud)

和XAML:

<ListBox HorizontalAlignment="Left" Margin="150,27,0,23" Name="listOrderItems" Width="150" FontFamily="Times New Roman" FontSize="12">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid Margin="4">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding Quantity}" FontWeight="Bold"  />
                    <TextBlock Grid.Column="1" Text="{Binding Name }" />
                    <TextBlock Grid.Column="2" Text="{Binding Price }" />
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
Run Code Online (Sandbox Code Playgroud)

我的问题是如何更新ListBox以显示我正在添加到包含数据(即OrderItems)的List的新项目.如果我以任何方式添加,删除或修改List,这不会反映在ListBox中.谢谢!

小智 6

对于你的情况最好的方式使用mvvm patern.简而言之:您的模型OrderItem应该实现接口INotifyPropertyChanged.如果属性发生变化,则通知此事.然后创建viewmodel并在datacontext中设置它.在viewModel中添加带有OrderItems的ObservableCollection,该集合应该通知视图有关其中的更改.有关更多信息,请阅读以下文章:MVVM

  • 同时在绑定一些动态员工时,不要忘记将Binding的**NotifyOnSourceUpdated**和**NotifyOnTargetUpdated**属性设置为`true` (2认同)