DataGridTemplateColumn 中的绑定命令
Binding Command withing a DataGridTemplateColumn
我想将命令 ("EditOrCreateStudentCommand") 绑定到 DataGridTemplateColumn 中的按钮。
本例中的 DataContext 是 StudentViewModel。这是在网格中定义的。
在 DataTemplate 中我无法执行命令(没有任何反应)。
在模板之外,我可以毫无问题地执行命令。可能是什么原因?
<Grid DataContext="{Binding StudentViewModel}">
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Students}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" IsReadOnly="True" Width="*" />
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding Path=DataContext.EditOrCreateStudentCommand, RelativeSource={RelativeSource AncestorType=Grid}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
我已经在 Whosebug 上看过其他相同的问题,但是 none 解决了这个问题。
问题的根本原因是 DataGrid
模板包含 Grid
。这就是为什么当你设置相对源时,你会得到不正确的网格。从 visual studio 中的可视树视图:
您的问题的一个可能解决方案是将名称添加到网格并通过绑定中的 ElementName
引用它:
<Grid x:Name="StudentGrid" DataContext="{Binding StudentViewModel}">
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Students}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" IsReadOnly="True" Width="*" />
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding Path=DataContext.EditOrCreateStudentCommand, ElementName=StudentGrid}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
我想将命令 ("EditOrCreateStudentCommand") 绑定到 DataGridTemplateColumn 中的按钮。 本例中的 DataContext 是 StudentViewModel。这是在网格中定义的。
在 DataTemplate 中我无法执行命令(没有任何反应)。 在模板之外,我可以毫无问题地执行命令。可能是什么原因?
<Grid DataContext="{Binding StudentViewModel}">
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Students}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" IsReadOnly="True" Width="*" />
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding Path=DataContext.EditOrCreateStudentCommand, RelativeSource={RelativeSource AncestorType=Grid}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
我已经在 Whosebug 上看过其他相同的问题,但是 none 解决了这个问题。
问题的根本原因是 DataGrid
模板包含 Grid
。这就是为什么当你设置相对源时,你会得到不正确的网格。从 visual studio 中的可视树视图:
您的问题的一个可能解决方案是将名称添加到网格并通过绑定中的 ElementName
引用它:
<Grid x:Name="StudentGrid" DataContext="{Binding StudentViewModel}">
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Students}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" IsReadOnly="True" Width="*" />
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding Path=DataContext.EditOrCreateStudentCommand, ElementName=StudentGrid}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>