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) { }
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With