I've created a simple checked list box for use in my WPF application. Annoyingly, I can't quite pin down how to get my form to listen for a CheckedChanged event firing for any of the items in the list box.
My code is as follows. Firstly, a class to hold the CheckedListItems:
Code in my window:Code:Imports System.ComponentModel Public Class CheckedListItem(Of T) Implements INotifyPropertyChanged Public Event PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged Private _IsChecked As Boolean Private _Item As T Public Sub New() End Sub Public Sub New(item As T, Optional isChecked As Boolean = False) Me._Item = item Me._IsChecked = isChecked End Sub Public Property Item() As T Get Return _Item End Get Set(value As T) _Item = value RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Item")) End Set End Property Public Property IsChecked() As Boolean Get Return _IsChecked End Get Set(value As Boolean) If Not _IsChecked = value Then _IsChecked = value RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("IsChecked")) End If End Set End Property End Class
My XAML:Code:Class ProgressWindow Implements INotifyPropertyChanged Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged Private _CycleJobItems As ObservableCollection(Of CheckedListItem(Of CycleJob)) Public Property CycleJobItems() As ObservableCollection(Of CheckedListItem(Of CycleJob)) Get Return _CycleJobItems End Get Set(value As ObservableCollection(Of CheckedListItem(Of CycleJob))) _CycleJobItems = value End Set End Property
Anyone got any ideas about the last piece of the jigsaw?Code:<ListBox Name="clbCycleJobs" ItemsSource="{Binding CycleJobItems}" Margin="98,76,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="167" Height="134"> <ListBox.ItemTemplate> <DataTemplate> <CheckBox Height="16" IsChecked="{Binding IsChecked}" Content="{Binding Path=Item.JobName}" IsTabStop="False" /> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
Thanks...




Reply With Quote