Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WPF ComboBox SelectionChanged event to command not firing

Tags:

combobox

mvvm

wpf

I have the following XAML of a ComboBox which has a code-behind SelectionChanged event handler and another Command property of the ViewModel. I have set the SelectedIndex property to 0. Now when I run the project, the code-behind handler is invoked, but the Command is not executed. What I want is that the Command should be executed for SelectedIndex=0 the first time the View is loaded.

<ComboBox Name="listComboBox" SelectionChanged="listComboBox_SelectionChanged" SelectedIndex="0" SelectedValuePath="Content" Margin="5,0" Height="35" Width="150" VerticalAlignment="Center" HorizontalAlignment="Left">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <i:InvokeCommandAction Command="{Binding ListTypeComboSelectionChangedCmd}" CommandParameter="{Binding ElementName=listComboBox, Path=SelectedValue}"/>
        </i:EventTrigger>
     </i:Interaction.Triggers>
     <ComboBoxItem Content="ItemOne" />
     <ComboBoxItem Content="ItemTwo" />
     <ComboBoxItem Content="ItemThree" />
</ComboBox>

Update

Code-behind event handler:

private void listComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { }

ICommand object:

public ICommand ListTypeComboSelectionChangedCmd 
{ 
    get { return new RelayCommand<string>(ListTypeComboSelectionChangedCmdExec); }
    private set;
}

ICommand Handler:

private void ListTypeComboSelectionChangedCmdExec(string listType) { }
like image 614
Lucifer Avatar asked Mar 24 '14 19:03

Lucifer


2 Answers

Bind SelectedValue to a Property on the view model.

In the Property set{...} block do your logic there or call

ListTypeComboSelectionChangedCmdExec(value)

See Binding ComboBox SelectedItem using MVVM

like image 108
Michal Ciechan Avatar answered Oct 24 '22 04:10

Michal Ciechan


In my case, I use handler in the code behind and connect it to ModelView as below.

var viewModel = (MyViewModel)DataContext;
if (viewModel.MyCommand.CanExecute(null))
    viewModel.MyCommand.Execute(null);

Please check this link: Call Command from Code Behind

like image 23
Sangwon Choi Avatar answered Oct 24 '22 05:10

Sangwon Choi