WPF 如何从 ListView GridView 中绑定到 ViewModel 中的 ICommand?

问题描述 投票:0回答:1

我有一个使用 MVVM 的 WPF 应用程序。我有一个以视图模型作为其数据上下文的视图。在视图内部,我有一个绑定到可观察集合的 ListView。在 ListView 的每一行上,我都有一个按钮,我想将其绑定到 DataContext 中的 ICommand。如何设置relativesource来访问DataContext ICommand?

xaml

<ListView ItemsSource="{Binding Services}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
            <GridViewColumn Header="Frequency" DisplayMemberBinding="{Binding Frequency}" />
            <GridViewColumn Header="Type" DisplayMemberBinding="{Binding Type}" />
            <GridViewColumn Header="Enable State" DisplayMemberBinding="{Binding EnableState}" />
            <GridViewColumn Header="" >
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <Button Background="Transparent" BorderThickness="0" Command="{Binding RemoveTimerClick}" CommandParameter="{Binding}">
                           <Image Source="pack://application:,,,/Resources/Images/Delete.png" Width="20"/>
                       </Button>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

此命令绑定正在寻找服务中的 ICommand。我试过了

Command="{Binding RemoveTimerClick, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"

但这不起作用,因为它绑定到 UserControl(即视图),而不是 DataContext(即视图模型)。如何绑定到也包含服务集合的 DataContext?

c# wpf listview
1个回答
0
投票

这里找到了答案。您必须将

DataContext
添加到绑定命令中:

Command="{Binding Path=DataContext.RemoveTimerClick, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" CommandParameter="{Binding}"
© www.soinside.com 2019 - 2024. All rights reserved.