在MVVM中绑定ListPicker(Selection_Changed)

时间:2014-07-02 16:21:52

标签: c# xaml windows-phone-8 mvvm windows-phone

我正在尝试将命令附加到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>

Sentences只是我的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);

但我有错误说我通过的论证无效,为什么会这样?

1 个答案:

答案 0 :(得分:0)

你需要这样做:

<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,它有一些帮助它的类。