gpt4 book ai didi

.net - 绑定(bind)到数据网格中的命令

转载 作者:行者123 更新时间:2023-12-03 13:21:06 25 4
gpt4 key购买 nike

我在 WPF 应用程序中使用 M-V-VM 模式。我将 ViewModel 绑定(bind)到 ContentControl 并使用窗口资源中定义的数据模板来呈现该 ViewModel 的 View (UserControl)。

在 ViewModel 中,我有一个项目集合。我将该集合绑定(bind)到 WPF 工具包中提供的数据网格。同样在 View 模型中,我定义了一个 RemoveItem 命令,该命令接受要删除的项目 ID 的参数。

我将如何绑定(bind)到数据网格中的该命令?网格的数据上下文就是那个集合,所以类似于:

<Button Command="{Binding Path=RemoveCommand}" CommandParameter="{Binding Path=id}">X</Button>

不起作用 - 它找不到命令。我想我需要进行 RelativeSource 绑定(bind),但那会是什么样子?祖先类型是 UserControl 还是 ContentControl?我的 ViewModel 作为 DataContext 驻留在哪里?

还是我离这儿很远?

最佳答案

是的,你只需要升一级。我会尝试绑定(bind) ElementName首先求助于RelativeSource仅在必要时。例如,我更喜欢这个:

<DataGrid x:Name="_grid">
...
<Button Command="{Binding DataContext.RemoveItem, ElementName=_grid}"/>
...
</DataGrid>

也就是说,当涉及到元素名称和控件范围时,XAML 编译器可能会陷入困境,因此您可能需要求助于 RelativeSource :
<DataGrid x:Name="_grid">
...
<Button Command="{Binding DataContext.RemoveItem,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type DataGrid}}
}"/>
...
</DataGrid>

您只需要搜索直到数据上下文成为您的 View 模型。您可以搜索 UserControl如果你想 - 不确定它真的很重要。两者都是非常脆弱的绑定(bind),这就是为什么我更喜欢 ElementName方法。

关于.net - 绑定(bind)到数据网格中的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/581715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com