如何将命令从页面的数据上下文绑定到列表项

本文关键字:上下文 数据 绑定 列表 命令 | 更新日期: 2023-09-27 18:31:50

我有一个页面,视图模型被设置为它的数据上下文。 在该页面中,我有一个列表。 它通过视图模型中的属性进行填充。列表具有用户控件。并且该用户控件有一个按钮。我希望该按钮与视图模型中的命令绑定。有什么办法吗?

<Page DataContext=PageViewModel>
...
<ScrollViewer Grid.Row="3" Margin="20,0" Visibility="{Binding ByVenueSelected, Converter={StaticResource BooleanToVisibilityConverter}}">
                <StackPanel>
                    <ItemsControl ItemsSource="{Binding EventsListByVenue}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <myControls:EventDetails /> <!--in this control i want to bind a command available in PageViewModel-->
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </StackPanel>
            </ScrollViewer>
...
</Page>

如何将命令从页面的数据上下文绑定到列表项

在@FunksMaName的帮助下,我解决了这个问题。我相信有更优雅和更好的方法,但这对我来说是一个快速简便的解决方案:

<Button Style="{StaticResource NoHighlightButtonStyle}" Tag="{Binding link}" CommandParameter="{Binding Path=Tag,RelativeSource={RelativeSource Mode=Self}}" Visibility="{Binding link,Converter={StaticResource DataAvailabilityToVisibilityConverter}}" Command="{Binding Path=Event.LinkCommand,Source={StaticResource Locator}}" >
                <TextBlock Margin="0,5" Foreground="SkyBlue" Text="{Binding link}" TextWrapping="Wrap" FontSize="16"/>
</Button>

注意事项:我认为 XAML 仅在命令上下文中搜索命令参数,因此它给了我 null 参数,而相同的绑定对于 Button 中的 textblock 工作正常。所以我欺骗它以将值存储在标签中,并从那里使用它。

Tag="{Binding link}" CommandParameter="{Binding Path=Tag,RelativeSource={RelativeSource Mode=Self}}"