Bind to ItemsControl's DataContext from inside an ItemTemplate

左心房为你撑大大i 提交于 2019-11-26 12:29:28

问题


I have an ItemsControl whose for the ItemTemplate DataTemplate contains a Button. I want the Command on the button to bind to a Command on the DataContext of the ItemsControl, not the ItemTemplate. I think the solution has to do with using RelativeSource, but my attempts so far have failed:

<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>

How can I get the Button to bind to the GameSelectedCommand of the ItemsControl\'s DataContext object?


回答1:


You're setting the source of the binding to the ItemsControl itself. Therefore, you'll need to dereference the DataContext of the ItemsControl:

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

How would you have known this? Take a look at your debug output window when running the app. You'll see a message along the lines of "Cannot resolve property 'GameSelectedCommand' on type 'ItemsControl'".



来源:https://stackoverflow.com/questions/1511516/bind-to-itemscontrols-datacontext-from-inside-an-itemtemplate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!