2010-03-26 6 views
3

У меня есть ListBox WPF, где у меня есть флажки, но каков способ получить список элементов, которые отмечены?Как получить отмеченные элементы в WPF ListBox?

ListBox - это данные, привязанные к Dictionary<T>.

Вот XAML:

<Window x:Class="WpfApplication.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Window1" 
     Height="300" 
     Width="300"> 
    <Grid Margin="10"> 
     <ListBox ItemsSource="{DynamicResource Nodes}" Grid.IsSharedSizeScope="True" x:Name="MyList"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition SharedSizeGroup="Key" /> 
          <ColumnDefinition SharedSizeGroup="Name" /> 
          <ColumnDefinition SharedSizeGroup="Id" /> 
         </Grid.ColumnDefinitions> 
         <CheckBox Name="NodeItem" Click="OnItemChecked"> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Margin="2" Text="{Binding Value.Name}" Grid.Column="1"/> 
           <TextBlock Margin="2" Text="-" Grid.Column="2"/> 
           <TextBlock Margin="2" Text="{Binding Value.Id}" Grid.Column="3"/> 
          </StackPanel> 
         </CheckBox> 
        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
    </Grid> 
</Window> 
+0

У меня есть пример того, как легко сделать проверочный список в WPF http://www.jarloo.com/how-to-create-a-checkedlistbox-in-wpf/, если вы используете обертку, такую ​​как она легко определить, какие элементы проверяются, глядя на сбор и тестирование свойства IsChecked. – Kelly

ответ

2

Это обычно делается через ViewModel, что это структура данных, которая предоставляет к просмотру (через DataContext) и модель (ваши данные) и просматривать конкретные информацию, например, проверяется ли элемент или нет.

В вашем примере ваш словарь не будет, скажем, словарем, но словарь и PersonViewModel будут иметь свойство IsChecked и свойство Person, указывающее на модель.

В противном случае вам нужно найти флажок в шаблонах или перейти к элементу списка из флажка, и это довольно сложно.

+0

Спасибо, что это полезно. Но как вы это делаете в коде? У вас есть примеры или ссылки? –

+1

Я согласен с @VoidDweller по ссылке. Другая ссылка (также статья Джоша Смита) - http://msdn.microsoft.com/en-us/magazine/dd419663.aspx. В частности, о IsChecked, посмотрите на http://www.telerik.com/community/forums/wpf/treeview/getting-checked-items-using-mvvm.aspx, где они поместили свойства ViewModel в модель, но идея тоже самое. – Timores

+0

Статья MSDN является хорошей. Мне нравится ссылка на форум, диаграммы классов великолепны. Я также добавил ссылку Джейсона Долинджера на мой ответ. – VoidDweller

1

Джош Смит имеет код article о кодебете, который должен объяснить, что вам нужно. Он обсуждает TreeView, но принцип будет переноситься на CheckBox.

Существует также очень интересный подход here с использованием DataTemplate и Привязкой CheckBox.IsChecked свойства к ListBoxItem.IsSelected собственности.

Если вы новичок в MVVM, у Jason Dolinger есть отличное видео по теме. Это заставляет вас переходить от использования кода за файлами к полному шаблону MVVM, включая Injection and Testing Dependency.

Смежные вопросы