如何将命令绑定到 DataContext 之外的按钮中?
Posted
技术标签:
【中文标题】如何将命令绑定到 DataContext 之外的按钮中?【英文标题】:How to bind a ICommand into a Button out of DataContext? 【发布时间】:2022-01-18 15:23:46 【问题描述】:我在带有 DataContext (KeyValuePair) 的 DataGrid 中有一个按钮。 我想在这个按钮中实现一个命令。 但是如果我使用 Command="Binding CommandoTest" 它就不起作用了。
我在没有 DataContext 的情况下将 ICommand 测试到 Grid 中,效果很好。
<DataGrid DataContext="Binding PersonList.Keys">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Button Command="Binding CommandoTest" Content="CommandoTest"></Button>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
命令代码:
Public ReadOnly Property CommandoTest As ICommand
Get
Return CommandTest_exp
End Get
End Property
Public Sub CommandTest_exp()
MessageBox.Show("Test", "Test")
End Sub
【问题讨论】:
【参考方案1】:我想DataGrid
在某个元素的内部,其DataContext
是带有CommandoTest
属性的元素。
如果是这种情况,使用 Grid
作为父级的示例,您可以使用:
<Grid x:Name="parent_grid">
<DataGrid DataContext="Binding PersonList.Keys">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Button Command="Binding DataContext.CommandoTest, ElementName=parent_grid" Content="CommandoTest"></Button>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
另一种不必命名任何控件的方法是(这不适用于前面示例中的 Grid
,因为它首先会找到 Grid
,它是你的Button
,所以我添加了另一个Border
类型的父元素):
<Border>
<Grid>
<DataGrid DataContext="Binding PersonList.Keys">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Button Command="Binding DataContext.CommandoTest, RelativeSource=RelativeSource Mode=FindAncestor, AncestorType=x:Type Border" Content="CommandoTest"></Button>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Border>
【讨论】:
以上是关于如何将命令绑定到 DataContext 之外的按钮中?的主要内容,如果未能解决你的问题,请参考以下文章
MVVM从TabControl绑定到Page.DataContext
将 UserControl ListBox ItemSsource 绑定到父 DataContext 时出错
将 datacontext 字符串属性绑定到 StaticResource 键