从一个ItemTemplate内绑定到的ItemsControl的DataContext的(Bind

2019-07-20 15:23发布

我有一个ItemsControl,其对ItemTemplate中DataTemplate中包含一个按钮。 我想按钮上的命令绑定到ItemsControl的,不ItemTemplate中的DataContext的命令。 我认为解决的办法有使用的RelativeSource做的,但我尝试到目前为止都失败了:

<ItemsControl ItemsSource="{Binding Games}">        
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button Command="{Binding Path=GameSelectedCommand, Source={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}" 
                    CommandParameter="{Binding}" 
                    Style="{StaticResource MenuButtonStyle}" 
                    Content="{Binding Name}"/>    
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

我怎样才能获得按钮绑定到ItemsControl的的DataContext对象的GameSelectedCommand?

Answer 1:

你设置绑定的源ItemsControl本身。 因此,你需要取消引用DataContext中的ItemsControl

Command="{Binding DataContext.GameSelectedCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}"

你怎么会知道呢? 运行应用程序时,看看你的调试输出窗口。 你会看到一个消息一起的“关于类型无法解析属性“GameSelectedCommand‘的ItemsControl’”行。



文章来源: Bind to ItemsControl's DataContext from inside an ItemTemplate