0

これは私のxaml

    <ListBox x:Name="HistoryList"          
                     ItemsSource="{Binding HistoryCollection}" 
                       >
        <ListBox.ItemTemplate >
            </DataTemplate>                 
                    <CheckBox x:Name="UpCheckBox"   Height="50" Width="50" >
                        <interactivity:Interaction.Triggers>
                            <interactivity:EventTrigger EventName="Checked">
                                <interactivity:InvokeCommandAction Command="{Binding UpCheckedCommad}" CommandParameter="{Binding ElementName=UpCheckBox}"></interactivity:InvokeCommandAction>
                            </interactivity:EventTrigger>
                        </interactivity:Interaction.Triggers>
                    </CheckBox>                 
            </DataTemplate>
        </ListBox.ItemTemplate >
    </ListBox >

ViewModel私は使用しましたGalasoftMVVM Command Binding

    public ICommand UpCheckedCommad
    {
        get { return new RelayCommand<Object>(x => { PerformUpforTracks(x); }); }
    }

    void PerformUpforTracks(object x)
    {
        //TODO 
    }

CheckBoxa の中で aを使用しましたが、 のイベントをListBox ItemTemplate取得していませ ん。 ViewModel から Checked Event を取得したかったのです。誰でもこの問題を解決する考えがありますか?CheckedCheckBoxViewModel

4

2 に答える 2

2

ListBox.ItemTemplate の各インスタンスには、その DataContext として「コレクション内の現在の項目」が自動的に与えられます。あなたの場合、それは HistoryCollection の個々のアイテムです。あなたの例では、EventTrigger は HistoryItem の現在のインスタンス内で「ThumbsUpCheckedCommad」を検索しています。

EventTrigger で目的の ViewModel を強制的に検索するには、コマンド バインディングの "Source" プロパティを指定する必要があります。RelativeSource 構文を使用してツリーを検索し、ViewModel を DataContext として持つ最後の Control を検索することをお勧めします。

このようになります。

{Binding Path=ThumbsUpCheckedCommand, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}
于 2013-02-08T13:48:19.347 に答える
2

I got it By BindingCommandこうやって

Command="{Binding Path=DataContext.UpCheckedCommad,
          ElementName=HistoryList}" 
于 2013-02-08T14:05:35.577 に答える