从选中的列表框中检索选定的项目?
Retrieving Selected Items from Checked List Box?
我已经实现了一个选中的列表框(或者更确切地说,尝试实现一个选中的列表框),并且进展顺利。我已经能够用目录中的文件列表填充它(这是我需要的),但是当我 select 项目时,然后尝试检查 .SelectedItems 属性 , 列表中没有任何内容。
这是XAML:
<ListBox x:Name="lbxSourceFiles" x:FieldModifier="private" SelectionMode="Multiple" Grid.Column="1" Grid.Row="2">
<ListBox.ItemTemplate>
<DataTemplate>
<ListBoxItem IsSelected="{Binding IsChecked}">
<CheckBox Content="{Binding Name}" Tag="{Binding FullName
</ListBoxItem>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这是我填充它的方式:
DirectoryInfo DI = new DirectoryInfo("Trivia Source Files");
this.lbxSourceFiles.ItemsSource = new ObservableCollection<FileInfo>( DI.GetFiles( "*.xls" ) );
显然我在这里做错了,我到处都看到关于如何创建这些东西的帖子,但我无法弄清楚如何让它对实际 selecting 项目起作用。
请告诉我我做错了什么。
您的数据模板有误。您创建了另一个 ListBoxItem,因此简化的可视化树看起来像这样:
+- ListBox
| +- ListBoxItem
| | +- ListBoxItem
| | +- CheckBox
| +- ListBoxItem
| | +- ListBoxItem
| | +- CheckBox
| +- ListBoxItem
| | +- ListBoxItem
| | +- CheckBox
只需从 DataTemplate 中删除 ListBoxItem 并在 CheckBox 中设置 Binding,在其中找到正确的 ListBoxItem
<DataTemplate>
<CheckBox Content="{Binding Name}"
IsChecked="{Binding
RelativeSource={RelativeSource
Mode=FindAncestor,
AncestorType={x:Type ListBoxItem}},
Path=IsSelected,
Mode=TwoWay}"
Tag="{Binding FullName}" />
</DataTemplate>
我已经实现了一个选中的列表框(或者更确切地说,尝试实现一个选中的列表框),并且进展顺利。我已经能够用目录中的文件列表填充它(这是我需要的),但是当我 select 项目时,然后尝试检查 .SelectedItems 属性 , 列表中没有任何内容。
这是XAML:
<ListBox x:Name="lbxSourceFiles" x:FieldModifier="private" SelectionMode="Multiple" Grid.Column="1" Grid.Row="2">
<ListBox.ItemTemplate>
<DataTemplate>
<ListBoxItem IsSelected="{Binding IsChecked}">
<CheckBox Content="{Binding Name}" Tag="{Binding FullName
</ListBoxItem>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这是我填充它的方式:
DirectoryInfo DI = new DirectoryInfo("Trivia Source Files");
this.lbxSourceFiles.ItemsSource = new ObservableCollection<FileInfo>( DI.GetFiles( "*.xls" ) );
显然我在这里做错了,我到处都看到关于如何创建这些东西的帖子,但我无法弄清楚如何让它对实际 selecting 项目起作用。
请告诉我我做错了什么。
您的数据模板有误。您创建了另一个 ListBoxItem,因此简化的可视化树看起来像这样:
+- ListBox
| +- ListBoxItem
| | +- ListBoxItem
| | +- CheckBox
| +- ListBoxItem
| | +- ListBoxItem
| | +- CheckBox
| +- ListBoxItem
| | +- ListBoxItem
| | +- CheckBox
只需从 DataTemplate 中删除 ListBoxItem 并在 CheckBox 中设置 Binding,在其中找到正确的 ListBoxItem
<DataTemplate>
<CheckBox Content="{Binding Name}"
IsChecked="{Binding
RelativeSource={RelativeSource
Mode=FindAncestor,
AncestorType={x:Type ListBoxItem}},
Path=IsSelected,
Mode=TwoWay}"
Tag="{Binding FullName}" />
</DataTemplate>