Я думаю, что то, что вы хотите, может быть лучше достигнуто путем определения DataTemplate
, который будет использоваться для каждого элемента в ListBox. DataTemplate
указывает, как вы хотите, чтобы отдельный фрагмент данных (Client
в вашем случае) отображался в ListBox.
Вот мой XAML для простого шаблона данных.
<DataTemplate x:Key="clientTemplate" DataType="{x:Type local:Client}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<CheckBox IsChecked="{Binding IsSelected}" />
<TextBlock Grid.Column="1" Text="{Binding Name}" Margin="5,0,0,0" />
</Grid>
</DataTemplate>
Вот как я ссылался на это в объявлении ListBox:
<ListBox ItemsSource="{Binding SelectedClients}"
VirtualizingStackPanel.IsVirtualizing="True"
ItemTemplate="{StaticResource clientTemplate}" />
Во-вторых, к ответу Гранта вы должны быть уверены, что ваш класс Client
реализует INotifyPropertyChanged
. Кроме того, вы захотите представить свой список клиентов, используя коллекцию, которая поддерживает уведомления об изменениях. Я обычно использую ObservableCollection<T>
.