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>

コマンドが実行されているとき、ラムダに渡される vat は null です。xaml CommandParameter を "{Binding ElementName=VATs}" に設定した場合、ラムダの vat には、適切なプロパティ SelectedItem オブジェクト (null ではない) を持つ ListPicker があります。

これはバグですか、それとも何か間違っていますか?

アップデート

概要:

  1. CommandParameter="{Binding Path=SelectedItem, ElementName=VATs}" - NULL があります

  2. CommandParameter="{Binding Path=SelectedIndex, ElementName=VATs}" - 正常に動作します! 選択したバットのインデックスがあります

  3. CommandParameter="{Binding ,ElementName=VATs}" - 正常に動作します! 私は適切なselecteditemを持つ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 に答える