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 
    }

我在CheckBox里面使用了一个。ListBox ItemTemplate但是没有得到里面的 Checked事件CheckBox。 我想从我的 ViewModel 中获取 Checked Event。谁能有任何想法来解决这个问题?ViewModel

4

2 回答 2

2

ListBox.ItemTemplate 的每个实例都被自动赋予“集合中的当前项”作为其 DataContext。在您的情况下,这是 HistoryCollection 中的每个单独项目。在您的示例中,EventTrigger 正在您当前的 HistoryItem 实例中搜索“ThumbsUpCheckedCommad”。

为了强制 EventTrigger 在您想要的 ViewModel 中搜索,您需要指定命令绑定的“Source”属性。我建议使用RelativeSource 语法,在树中搜索最后一个控件以将您的ViewModel 作为其DataContext。

它看起来像这样。

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

Command通过这种方式绑定得到它

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