WPF ComboBox SelectionChanged事件无法触发命令。

31 浏览
0 Comments

WPF ComboBox SelectionChanged事件无法触发命令。

我有以下的XAML代码,其中包含一个带有代码后台的SelectionChanged事件处理程序和ViewModel的另一个Command属性。我将SelectedIndex属性设置为0。现在当我运行项目时,代码后台处理程序被调用,但是Command没有被执行。我希望在View加载时,当SelectedIndex=0时,Command应该被执行。

更新:

代码后台事件处理程序:

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

ICommand对象:

public ICommand ListTypeComboSelectionChangedCmd

{

get { return new RelayCommand(ListTypeComboSelectionChangedCmdExec); }

private set;

}

ICommand处理程序:

private void ListTypeComboSelectionChangedCmdExec(string listType) { }

0
0 Comments

WPF ComboBox SelectionChanged event to command not firing的问题出现的原因是在代码中使用了事件处理程序,但未能正确将其与ViewModel连接起来。解决方法是通过以下步骤正确连接事件处理程序和ViewModel。

1. 首先,需要在XAML中为ComboBox控件添加SelectionChanged事件处理程序。例如:

<ComboBox SelectionChanged="MyComboBox_SelectionChanged" />

2. 在代码后台,需要实现SelectionChanged事件处理程序。例如:

private void MyComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var comboBox = (ComboBox)sender;
    var selectedItem = comboBox.SelectedItem;
    var viewModel = (MyViewModel)DataContext;
    if (viewModel.MyCommand.CanExecute(selectedItem))
        viewModel.MyCommand.Execute(selectedItem);
}

3. 确保在XAML中正确设置了ComboBox的DataContext,以便能够正确访问ViewModel。例如:

<ComboBox DataContext="{Binding MyViewModel}" />

4. 最后,确保在ViewModel中正确实现了命令。例如:

public class MyViewModel
{
    public MyCommand MyCommand { get; set; }
    public MyViewModel()
    {
        MyCommand = new MyCommand();
    }
}
public class MyCommand : ICommand
{
    public bool CanExecute(object parameter)
    {
        // Add your logic here to determine if command can be executed
        return true;
    }
    public void Execute(object parameter)
    {
        // Add your logic here to execute the command
    }
    public event EventHandler CanExecuteChanged;
}

通过以上步骤,即可实现将WPF ComboBox的SelectionChanged事件与ViewModel中的命令正确连接起来,从而解决WPF ComboBox SelectionChanged event to command not firing的问题。更多关于此问题的信息可以参考链接:Call Command from Code Behind

0
0 Comments

问题出现的原因是在WPF中,当ComboBox的SelectionChanged事件触发时,绑定的命令不会执行。解决方法是将SelectedValue绑定到视图模型的属性上,并在属性的set块中执行逻辑或调用命令。

具体做法是,在视图模型中将SelectedValue绑定到一个属性上,然后在属性的set块中执行逻辑或调用命令。这样,当ComboBox的SelectionChanged事件触发时,属性的set块会被调用,从而执行相应的逻辑或命令。

这个解决方法可以参考以下链接:Binding ComboBox SelectedItem using MVVM。在这个链接中,有一个回答提供了这个解决方法。

虽然这个解决方法很聪明,但是我更希望保持属性的setter代码的整洁。同时,我更想知道为什么这样的功能不起作用,即SelectionChanged事件触发了,但是却没有执行底层的命令。不管怎样,还是非常感谢这个解决方法。

还有一个解决方案是在视图的OnLoaded事件处理程序中,将SelectedValue设置为第一个值。这样做的原因是,属性的setter逻辑不够优化。

至于为什么事件在行为被“附加”之前就被触发了,我猜测是因为事件的触发发生在行为被“附加”之前。

0