Событие кнопки MVVM с представлением списка не получает выбранный элемент

Я пытаюсь получить selectedItem из своего списка. Я использую набор инструментов MVVM light и EventToCommand на кнопке.

Мой listView привязан к ObservableCollection, который правильно привязан. Вот xaml listView:

  <ListView   Name="serverListView"
                    Grid.Row="3"
                    Grid.Column="0"
                    Grid.ColumnSpan="2"
                    ItemsSource="{Binding Servers}"
                    ItemTemplate="{StaticResource ServerList}"
                    SelectionMode="Single"
                    BorderThickness="0"/>

Затем у меня есть кнопка, которую я использую Interaction.Triggers с mvvm EventToCommand, я не уверен, что привязка selectedItem верна. Событие запускается правильно через команду реле (mvvm light toolkit), но каждый раз я получаю null.

Вот моя кнопка xaml;

<Button x:Name="LoadButton"
                Content="Load Server"
                Grid.Column="0"
                Grid.Row="4"
                Grid.ColumnSpan="2">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="Click">
                    <mvvm:EventToCommand  Command="{Binding ButtonClick, Mode=OneWay}"
                                            CommandParameter="{Binding SelectedItem, ElementName=serverListView}"
                                            MustToggleIsEnabledValue="True"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Button>

Команда реле:

 this.ButtonClick = new RelayCommand<object>(new Action<object>(this.GetClickEvent));

person user101010101    schedule 14.06.2012    source источник
comment
зачем вам здесь нужно поведение eventtocommand? просто используйте свойства кнопки Command / CommandParameter   -  person Joachim Kerschbaumer    schedule 14.06.2012


Ответы (2)


Вы также должны привязать свойство SelectedItem списка просмотра к свойству (SelectedServer) вашей модели просмотра и изменить свой EventToCommand

CommandParameter="{Binding SelectedItem, ElementName=serverListView}"

to

CommandParameter="{Binding SelectedServer}"
person mathieu    schedule 14.06.2012

избавьтесь от привязки параметров команды, создайте свойство SelectedServer в своей модели просмотра и команду в своей модели просмотра без параметра

<ListView   Name="serverListView"
                Grid.Row="3"
                Grid.Column="0"
                Grid.ColumnSpan="2"
                ItemsSource="{Binding Servers}"
                ItemTemplate="{StaticResource ServerList}"
                SelectedItem="{Binding SelectedServer}"
                SelectionMode="Single"
                BorderThickness="0"/>

<Button Command="{Binding MyCommand}" />

в вашей модели просмотра у вас есть вся информация, необходимая для выполнения вашей командной логики.

person blindmeis    schedule 14.06.2012