微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mvvm-Light Silverlight,使用EventToCommand和Combobox

我将视图模型中的ComboBox的SelectedItemChangeEvent连接到ICommand.一切似乎工作正常,但我不知道如何获取ComBoxBox的SelectedItem.我想我需要使用EventToCommand的CommandParameter – 我将其绑定到viewmodel中具有ComboBox的selectedItem的内容吗?我试过这个:

<ComboBox 
  Width="422"
  Height="24"
  displayMemberPath="Name"
  ItemsSource="{Binding CategoryTypes}"
  SelectedItem="{Binding SelectedCategory}"
  >
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <MvvmLight:EventToCommand 
              Command="{Binding SelectCategoryCommand,Mode=TwoWay}"
              CommandParameter="{Binding SelectedCategory,Mode=TwoWay}"
              MustToggleIsEnabledValue="True" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</ComboBox>

在我看来,

public ICommand SelectCategoryCommand
{
    get
    {
        return new SelectCategoryCommand(this);
    }
}

public CategoryType SelectedCategory
{
    get; set;
}

和ICommand

public class SelectCategoryCommand : ICommand
{
    private Rowviewmodel _rowviewmodel;

    public SelectCategoryCommand(Rowviewmodel rowviewmodel)
    {
        _rowviewmodel = rowviewmodel;
    }

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        CategoryType categoryType = (CategoryType) parameter;
    }

}

但是,ICommand的Execute方法中的参数始终为空.我对SilverLight没有经验,所以我觉得我真的很想念这里的东西.谁能帮忙?提前致谢!

解决方法

在做一些挖掘之后,我发现将实际的SelectionChangedEventArgs作为ICommand的execute参数传递很简单:

只要设置PassEventArgsToCommand =“True”

<ComboBox Width="422"
          Height="24"
          displayMemberPath="Name"
          ItemsSource="{Binding CategoryTypes}"
          SelectedItem="{Binding SelectedCategory}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <MvvmLight:EventToCommand Command="{Binding SelectCategoryCommand,Mode=TwoWay}"
                                      MustToggleIsEnabledValue="True" 
                                      PassEventArgsToCommand="True"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</ComboBox>

然后在Execute方法中执行以下操作:

public void Execute(object parameter)
{
    SelectionChangedEventArgs e = (SelectionChangedEventArgs)parameter;
    CategoryType categoryType = (CategoryType)e.AddedItems[0];
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐