我正在尝试在标签上创建访问密钥,该访问密钥将作为目标ListBox的SelectedItem。
<Label Content="_List:">
<Label.Target>
<MultiBinding Converter="{StaticResource SelectedListBoxItem}">
<Binding Path="SelectedItem" ElementName="DocList" />
<Binding ElementName="DocList" />
</MultiBinding>
</Label.Target>
</Label>
<ListBox ItemsSource="{Binding ListData}"
SelectedItem="{Binding SelectedData}"
x:Name="DocList"
Focusable=>
<ListBox.ItemTemplate>
<DataTemplate DataType="local:DocTagData">
<TextBlock Text="{Binding DocName}" x:Name="Test"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
还有转换器:
Friend Class SelectedListBoxItem
Implements IMultiValueConverter
Public Function Convert(values() As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IMultiValueConverter.Convert
If values(0) Is Nothing Then Return Nothing
Dim listBox = DirectCast(values(1), ListBox)
If listBox Is Nothing Then Return Nothing
Return DirectCast(listBox.ItemContainerGenerator.ContainerFromItem(values(0)), ListBoxItem)
End Function
Public Function ConvertBack(value As Object, targetTypes() As Type, parameter As Object, culture As CultureInfo) As Object() Implements IMultiValueConverter.ConvertBack
Throw New NotImplementedException()
End Function
End Class
此代码的问题是,我第一次按Alt + L快捷键时,该代码不起作用。但是,当我通过向上/向下箭头或鼠标单击更改选定的项目时,每次执行此操作后,它都会起作用。
如果我将Window的加载事件中代码隐藏的列表框中的选定项更改为第二项,然后更改为第一项,则它将正常工作。
列表框的SelectedItem在视图模型的构造函数中被分配为集合的第一项。
是否有针对此问题的更好的解决方法,或者我在代码中做错了什么?