我有一个使用 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?
在这里找到了答案。您必须将
DataContext
添加到绑定命令中:
Command="{Binding Path=DataContext.RemoveTimerClick, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" CommandParameter="{Binding}"