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