2010-03-26 61 views
3

我有一个WPF列表框,我有复选框,但获取被检查项目列表的方式是什么?如何获取WPF列表框中的选中项目?

列表框是绑定到一个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 2012-05-11 00:57:27

回答

2

这通常是通过视图模型完成的,这是一个数据结构,暴露到视图(通过在DataContext)两种模型(数据)和视图特定的信息,例如是否检查项目。

在你的榜样,你的字典也不会,比如说,一个字典,而是一个字典和PersonViewModel将有一个财产器isChecked和人财物指着模型。

否则,你必须去寻找模板复选框或获得从复选框的列表框项目,这变得复杂非常快。

+0

谢谢这是有用的。但你如何在代码中这样做?你有任何例子或链接? – 2010-03-26 00:32:27

+1

我同意@VoidDweller的链接。另一个链接(也是Josh Smith的文章)是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 2010-03-26 07:25:29

+0

MSDN文章是一个很好的文章。我喜欢论坛链接,班级图很棒。我还将Jason Dolinger链接添加到了我的答案中。 – VoidDweller 2010-03-26 21:31:38

1

约什 - 史密斯已经在CodeProject上一个article应该解释你需要什么。他正在讨论TreeView,但该原则也将转移到CheckBox

还有使用DataTemplate和绑定CheckBox.IsChecked属性将ListBoxItem.IsSelected属性非常有趣的方法here

如果你是新的MVVM,Jason Dolinger有关于这个问题的一个很好的视频。它引导您逐步完成从使用文件后面的代码到完整的MVVM模式(包括依赖注入和测试)的过程。

相关问题