我已经实现了一个Checked List Box(或者更确切地说,试图实现一个选中的列表框),它已经很好了。我已经能够使用目录中的文件列表填充它(这是我需要的),但是当我选择项目,然后尝试检查.SelectedItems属性时,列表中没有任何内容。 / p>
这是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" ) );
显然我在这里做错了,我到处都看过如何创建这些东西的帖子,但是我无法弄清楚如何让它真正用于实际选择项目。
请告诉我这里的错误。
答案 0 :(得分:2)
您的DataTemplate错误。您创建另一个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>