我正在尝试将命令附加到ListPicker的事件Selection_Changed

我的xaml中有以下用于listpicker的代码:

   <toolkit:ListPicker
         x:name="picker" ItemsSource="{Binding Sentences}"
         SelectionChanged="{Binding PickerCommand, Mode=TwoWay}" >
            <toolkit:ListPicker.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding }"/>
                </DataTemplate>
            </toolkit:ListPicker.ItemTemplate>
        </toolkit:ListPicker>

句子只是ViewModel中的字符串列表,如何创建一个简单的Commad例如,它将仅在ListPicker中显示带有当前所选字符串的MessageBox?

我在代码Behind中编写的与此函数相似的东西:
private void PickerCommand(object sender, SelectionChangedEventArgs e)
{
    if (piker.SelectedItem != null)
    {
      MessageBox.Show(piker.SelectedItem.ToString());
    }
}

编辑 :

我刚刚创建了这个简单的函数:
public void Test()
{
MessageBox.Show("Test!");
}

通过了:
PickerCommand = new RelayCommand<SelectionChangedEventArgs>(Test);

但是我有一个错误,说我传递的参数无效,为什么呢?

最佳答案

您需要这样做:

<toolkit:ListPicker x:name="picker" ItemsSource="{Binding Sentences}">
 <i:Interaction.Triggers>
    <i:EventTrigger EventName="SelectionChanged">
        <command:EventToCommand Command="{Binding PickerCommand, Mode=OneWay}" />
    </i:EventTrigger>
</i:Interaction.Triggers>
        <toolkit:ListPicker.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding }"/>
            </DataTemplate>
        </toolkit:ListPicker.ItemTemplate>

接着
    public class MYViewModel :ViewModelBase
{
   public MyViewModel()
   {
       PickerCommand = new RelayCommand<object>(ActionForPickerCommand);
    }
    public ICommand PickerCommand {get;set;}
}

使用MVVM Light,它提供了一些帮助。

关于c# - 在MVVM中绑定(bind)ListPicker(Selection_Changed),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24536285/

10-13 04:54