在更改SelectedItem之前,不会触发标签的AccessKey定位到ListBox

时间:2019-06-11 06:23:44

标签: wpf vb.net

我正在尝试在标签上创建访问密钥,该访问密钥将作为目标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在视图模型的构造函数中被分配为集合的第一项。

是否有针对此问题的更好的解决方法,或者我在代码中做错了什么?

0 个答案:

没有答案