我在ListBox ItemControl.ItemTemplate中有一个Expander。将数据绑定到ListBox后,每个ListItem上的所有Expanders都具有IsExpanded = False。当一个新的ListItem手动添加到ListBox时,我需要将IsExpanded默认设置为true。我的XAML如下:
<ListBox
ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ScrollViewer.CanContentScroll="False"
VirtualizingStackPanel.IsVirtualizing="False"
Grid.ColumnSpan="2"
HorizontalAlignment="Stretch"
Grid.Row="2"
Name="ArbitraryDataListbox"
ItemsSource="{Binding ElementName=CurrentArbitraryDataListControl, Path=CurrentJob.AdditionalData}">
<ListBox.Resources>
<Style TargetType="{x:Type Expander}">
<Setter Property="IsExpanded" Value="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="Beige"/>
<Setter Property="Foreground" Value="#202020"/>
<Setter Property="Background" Value="Beige"/>
</Style>
</ListBox.Resources>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Expander Header="{Binding Path=Name}" Margin="0,8,0,0" IsExpanded="{Binding RelativeSource={RelativeSource self}, ElementName=ArbitraryDataListbox, Path=}">
<Controls:ArbitraryDataControl
Width="{Binding ElementName=ArbitraryDataListbox, Path=ActualWidth, Converter={StaticResource SubtractConverter}, ConverterParameter=10}"
CurrentArbitraryData="{Binding}"
CurrentJob="{Binding ElementName=CurrentArbitraryDataListControl, Path=CurrentJob}"/>
</Expander>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListBox>
我是WPF的新手,无法理解如何在IsExpanded上设置绑定,所以当手动打开新项目时它是真的。
感谢您提供任何帮助!
答案 0 :(得分:1)
如果我理解您的代码,那么您现在已经扩展了ListBox的SelectedItem并且其他项目已折叠。如果所选项目发生更改,则旧选定项目将折叠,新选定项目将展开。
如果您希望能够将项目添加到集合中然后选择它,则应考虑使用ListCollectionView。
ListCollectionView包装您的内部集合并公开“CurrentItem”。您可以轻松地将此类绑定到ListBox,这将允许您在添加它之后调用ListCollectionView.MoveCurrentTo(object)来选择对象。