- C# WPF XAML ListBox
- WPF ListBox Selection
- WPF ListBox Binding Object
- WPF ListBox Control
- WPF ListBox of Colors
- WPF ListBox List Fonts
This post has the C# code for a WPF project that has a ListBox with a list of fruit, a simple TextBlock that displays the fruit that the user clicked on (selected), and a button that when clicked adds a “jackfruit” to the list and refreshes the list. Instead of, as in the previous post using the event, let’s use a Binding object in the MainWindow’s constructor. Have a look at Adam Nathan’s book WPF 4.5 Unleashed on page 362 (in chapter 13) if you have access to that book. If you don’t have the book that’s fine as I will include the code here. I created a WPF project in Visual Studio Community called ListBoxBindArray. This means that we have a list box that has data that originally comes from an array that uses data binding to a text block to show which fruit was selected.
We have a series of posts on Data Binding starting with the post called WPF Data Binding Introduction.
Here is the XAML code. Feel free to use this code in your own project.
<Window x:Class="ListBoxBindArray.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:ListBoxBindArray" mc:Ignorable="d" WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Title="ListBoxBindArray" Height="350" Width="500"> <StackPanel Orientation="Horizontal" Margin="14"> <StackPanel Orientation="Vertical"> <Label>ListBox</Label> <ListBox x:Name="lstbx" Height="200" Width="200"></ListBox> </StackPanel> <TextBlock x:Name="txtblck" Margin="10 " Height="20" Width="100"></TextBlock> <Button Click="Button_Click" Height="35">Add Jackfruit</Button> </StackPanel> </Window>
Here is the code behind.
using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Data; namespace ListBoxBindArray { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Binding binding = new Binding(); binding.Source = lstbx; binding.Path = new PropertyPath("SelectedItem"); txtblck.SetBinding(TextBlock.TextProperty, binding); } public void Window_Loaded(object sender, RoutedEventArgs e) { string[] fruit_array = { "apple", "peach", "mango" }; // convert an array to a list: List<string> lst = new List<string>(fruit_array); lst.Add("banana"); lstbx.ItemsSource = lst; lst.Add("pear"); lstbx.ItemsSource = null; lstbx.ItemsSource = lst; } private void Button_Click(object sender, RoutedEventArgs e) { var lst = lstbx.Items.Cast<string>().ToList(); // Linq lst.Add("jackfruit"); lstbx.ItemsSource = null; lstbx.ItemsSource = lst; } } }