2

我在 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 的增值税为空。如果我在 xaml CommandParameter 中将“{Binding ElementName=VATs}”设置为“{Binding ElementName=VATs}”,则 lambda 中的增值税具有具有正确属性 SelectedItem 对象(非空)的 ListPicker。

这是一个错误还是我做错了什么?

更新

概括:

  1. CommandParameter="{Binding Path=SelectedItem, ElementName=VATs}" - 我有 NULL

  2. CommandParameter="{Binding Path=SelectedIndex, ElementName=VATs}" - 工作正常!我有选定大桶的索引

  3. CommandParameter="{Binding ,ElementName=VATs}" - 工作正常!我有 ListPicker 和正确的选定项
4

2 回答 2

3

我宁愿建议将 ListPicker 的 SelectedItem 绑定到您的 VM 上的属性的双向绑定。然后从命令中,您可以轻松访问此属性。

如果您选择此解决方案,您可能甚至不需要命令,您可以直接从 VM 中的 SelectedItem 属性中触发您的计算。

干杯劳伦特

于 2013-03-25T14:49:56.903 回答
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 作为源。

于 2013-03-25T11:35:34.883 回答