Dot-Net
綁定到數據網格中的命令
我在 WPF 應用程序中使用 MV-VM 模式。我將 ViewModel 綁定到 ContentControl 並使用視窗資源中定義的數據模板來呈現該 ViewModel 的視圖(UserControl)。
在 ViewModel 中,我有一個項目集合。我將該集合綁定到 WPF 工具包中提供的數據網格。同樣在視圖模型中,我定義了一個 RemoveItem 命令,該命令接受要刪除的項目 ID 的參數。
我將如何綁定到數據網格中的該命令?網格的數據上下文就是那個集合,所以類似於:
<Button Command="{Binding Path=RemoveCommand}" CommandParameter="{Binding Path=id}">X</Button>不起作用 - 它找不到命令。我想我需要進行 RelativeSource 綁定,但那會是什麼樣子?祖先類型是 UserControl 還是 ContentControl?我的 ViewModel 作為 DataContext 駐留在哪裡?
還是我離這兒很遠?
是的,你只需要升一級。我會
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>您只需要搜尋直到數據上下文成為您的視圖模型。如果你願意,你可以搜尋
UserControl- 不確定它是否真的很重要。兩者都是非常脆弱的綁定,這就是我更喜歡這種ElementName方法的原因。