Я хочу использовать SelectedItem для установки выделения в выпадающий список из кода. Я могу заставить его работать только с помощью SelectedValue. SelectedItem выбросит нулевой ссылочный исключение с этим в верхней части StackTrace:Selecteditem в исключении ссылки на исключение combobox
на AttachedCommandBehavior.CommandBehaviorBinding.Execute()
Часть XAML:
<Window x:Class="MainWindowView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:acb="clr-namespace:AttachedCommandBehavior;assembly=AttachedCommandBehavior"
Title="Window1" Height="300" Width="300">
<StackPanel>
<ComboBox Name="ComboItems1"
DisplayMemberPath="Value"
SelectedValuePath="Key"
ItemsSource="{Binding Items}"
SelectedValue="{Binding SelectedValue}"
acb:CommandBehavior.Event="SelectionChanged"
acb:CommandBehavior.Command="{Binding Path=SelectionChangedCommand}"
acb:CommandBehavior.CommandParameter="{Binding ElementName=ComboItems1, Path=SelectedItem}" />
<ComboBox Name="ComboItems2"
DisplayMemberPath="Value"
SelectedValuePath="Key"
ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedItem}"
acb:CommandBehavior.Event="SelectionChanged"
acb:CommandBehavior.Command="{Binding Path=SelectionChangedCommand}"
acb:CommandBehavior.CommandParameter="{Binding ElementName=ComboItems2, Path=SelectedItem}"/>
</StackPanel>
Кодекса :
Imports AttachedCommandBehavior
Открытый класс MainWindowViewModel
Private _mainWindowView As MainWindowView
Public Property Items As New List(Of KeyValuePair(Of Integer, String))
Public Property SelectedItem As Nullable(Of KeyValuePair(Of Integer, String))
Public Property SelectedValue As Nullable(Of Integer)
Public Property SelectionChangedCommand As ICommand
Public Sub New()
Items.Add(New KeyValuePair(Of Integer, String)(1, "first item"))
Items.Add(New KeyValuePair(Of Integer, String)(2, "second item"))
Items.Add(New KeyValuePair(Of Integer, String)(3, "third item"))
Dim simpleCommand As SimpleCommand = New SimpleCommand()
simpleCommand.ExecuteDelegate = Sub(selectedItem As Object)
HandleSelectionChanged(selectedItem)
End Sub
SelectionChangedCommand = simpleCommand
SelectedValue = 1
'SelectedItem = Items(1) 'uncomment this to raise the null ref exception
End Sub
Private Sub HandleSelectionChanged(ByRef selectedItem As Object)
If selectedItem IsNot Nothing Then
'Do something
End If
End Sub
End Class
Почему SelectedItem не работает?
UPDATE:
Николай: у вас есть острый глаз. Это было связано с последней копией пасты!
Blindmeis: это, конечно же, является абстрактом из гораздо более крупной программы, в которой мне нужно событие selectedchanged для выполнения некоторых действий. Те команды должны остаться (хотя, возможно, им нужна фиксация).
С уважением,
Мишель
Попробуйте изменить закомментирована линию 'SelectedValue = 2' я связывании чувство его ваше мероприятие на SelectionChanged –
, когда все ваши seleteditem изменить изменения выбора так что вы все можете справиться в своем vm без командования? или я что-то пропустил? – blindmeis
ExitMusic: Я хочу, чтобы он работал с SelectedItem, и я демонстрирую, что SelectedValue работает, но SelectedItem нет. SelectedItem используется в ComboItems2. –