template example c# wpf xaml binding listbox

c# - example - Actualización de enlace de ListBox de WPF



wpf combobox template (2)

Soy nuevo en WPF y acabo de vincular una lista de elementos de clase específicos a un ListBox. ListBox ahora los muestra con éxito. Aquí hay un código, la clase primero:

public class OrderItem { public int Quantity { get; set; } public string Name { get; set; } public Double Price { get; set; } }

Algunos datos ficticios y el enlace, que todo sucede en el constructor del programa principal:

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;

Y el 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>

Mi pregunta es cómo puedo actualizar el ListBox para mostrar un nuevo elemento que estoy agregando a la Lista que contiene los datos, también conocidos como OrderItems. Si agrego, elimino o modifico la Lista de alguna manera, esto no se refleja en el ListBox. ¡Gracias!


En lugar de utilizar un List<OrderItem> use ObservableCollection<OrderItem> . Esto notificará que se ha agregado / eliminado algo para que tu ListBox sepa actualizarse.

Además, su OrderItem necesita implementar INotifyPropertyChanged y sus INotifyPropertyChanged deben llamar a OnPropertyChanged .


Para su mejor caso, use mvvm patern. En resumen: su modelo OrderItem debe implementar la interfaz INotifyPropertyChanged . Si la propiedad cambió, notificó acerca de esto. Luego crea viewmodel y configúralo en datacontext. En viewModel agrega ObservableCollection con OrderItems, esta colección debe notificarse acerca de los cambios en ella. para obtener más información, lea algunos artículos como este: MVVM