我在Windows Phone 7.1中使用MVVM Light Toolkit
ViewModel的一部分:
public RelayCommand<object> ChangeVATCommand
{
get
{
return _changeVATCommand
?? (_changeVATCommand = new RelayCommand<object>(
(vat) =>
{
}));
}
}
Xaml的一部分:
<toolkit:ListPicker ItemsSource="{Binding VATs}" x:Name="VATs" SelectedIndex="0" DisplayMemberPath="Name">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<cmd:EventToCommand Command="{Binding ChangeVATCommand, Mode=OneWay}"
CommandParameter="{Binding Path=SelectedItem, ElementName=VATs}"
/>
</i:EventTrigger>
</i:Interaction.Triggers>
</toolkit:ListPicker>
当命令运行时,传递给lambda的vat为null。如果我在xaml CommandParameter中设置为“{Binding ElementName = VATs}”,那么lambda中的vat会使ListPicker具有正确的属性SelectedItem对象(非null)。
更新
要点:
CommandParameter =“{Binding Path = SelectedItem,ElementName = VATs}” - 我有NULL
CommandParameter =“{Binding Path = SelectedIndex,ElementName = VATs}” - 工作正常!我有所选大桶的索引
答案 0 :(得分:3)
我宁愿建议将ListPicker的SelectedItem绑定到VM上的属性的双向绑定。然后从Command中,您可以轻松访问此属性。
如果您选择此解决方案,您可能甚至不需要Command,您可以直接从VM中的SelectedItem属性中触发计算。
干杯 劳伦
答案 1 :(得分:0)
我不久前遇到了类似的问题,解决方案是指示相应的VM:
<toolkit:ListPicker ItemsSource="{Binding VATs}" x:Name="VATs" SelectedIndex="0" DisplayMemberPath="Name">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<cmd:EventToCommand Command="{Binding Path=ViewModelName.ChangeVATCommand, Source={StaticResource Locator}, Mode=OneWay}"
CommandParameter="{Binding Path=SelectedItem, ElementName=VATs}"
/>
</i:EventTrigger>
</i:Interaction.Triggers>
</toolkit:ListPicker>
请注意,现在绑定引用了ViewModel并使用Locator作为源。