Datagrid 列 Header 模板绑定不适用于多个实例
Datagrid Column Header Template Binding Not working for Multiple Instances
我有一个数据网格模板列,其中包含一个 header 模板和一个单元格模板。此数据网格位于名为 ViewOne 的视图中。 ViewOne 的多个实例被注入另一个视图 - ViewTwo。
问题就在这里:当我在 ViewTwo 中创建 ViewOne 的单个实例时,一切正常。但是,当我创建它的多个实例时,除 header 模板中的按钮外,一切仍然完美。我试图找出原因,但我似乎无法解决问题,这真的很奇怪,因为即使单元格模板中的按钮也能正常工作,而且它们的连接方式几乎相同。
代码如下:
<DataGridTemplateColumn Width="Auto">
<DataGridTemplateColumn.Header>
<Button Background="Transparent" Height="Auto" Command="{Binding DataContext.AddRowCommand, RelativeSource={RelativeSource AncestorType=DataGrid}}"
Width="Auto" BorderBrush="Transparent" ToolTip="Add new row">
<Image Source="/DemoApp.Resource;component/Icons/Default/add-icon.png"/>
</Button>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Width="Auto" Background="Transparent" Height="Auto"
ToolTip="Delete selected row" BorderBrush="Transparent"
Command="{Binding DataContext.RemoveCommand, RelativeSource={RelativeSource AncestorType=DataGrid}}"
CommandParameter="Separator">
<Image Source="/DemoApp.Resource;component/Icons/Default/Delete.ico"/>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
我终于发现问题了。我只是将按钮命令绑定的 AncestorType 从 Datagrid 更改为 UserControl。显然,该绑定适用于集合中 UserControl 的第一个实例,但不适用于其他实例。有点奇怪,但它奏效了。
<Button Background="Transparent" Height="Auto" Command="{Binding DataContext.AddRowCommand, RelativeSource={RelativeSource AncestorType= UserControl}}" ...>
...
</Button
我有一个数据网格模板列,其中包含一个 header 模板和一个单元格模板。此数据网格位于名为 ViewOne 的视图中。 ViewOne 的多个实例被注入另一个视图 - ViewTwo。
问题就在这里:当我在 ViewTwo 中创建 ViewOne 的单个实例时,一切正常。但是,当我创建它的多个实例时,除 header 模板中的按钮外,一切仍然完美。我试图找出原因,但我似乎无法解决问题,这真的很奇怪,因为即使单元格模板中的按钮也能正常工作,而且它们的连接方式几乎相同。
代码如下:
<DataGridTemplateColumn Width="Auto">
<DataGridTemplateColumn.Header>
<Button Background="Transparent" Height="Auto" Command="{Binding DataContext.AddRowCommand, RelativeSource={RelativeSource AncestorType=DataGrid}}"
Width="Auto" BorderBrush="Transparent" ToolTip="Add new row">
<Image Source="/DemoApp.Resource;component/Icons/Default/add-icon.png"/>
</Button>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Width="Auto" Background="Transparent" Height="Auto"
ToolTip="Delete selected row" BorderBrush="Transparent"
Command="{Binding DataContext.RemoveCommand, RelativeSource={RelativeSource AncestorType=DataGrid}}"
CommandParameter="Separator">
<Image Source="/DemoApp.Resource;component/Icons/Default/Delete.ico"/>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
我终于发现问题了。我只是将按钮命令绑定的 AncestorType 从 Datagrid 更改为 UserControl。显然,该绑定适用于集合中 UserControl 的第一个实例,但不适用于其他实例。有点奇怪,但它奏效了。
<Button Background="Transparent" Height="Auto" Command="{Binding DataContext.AddRowCommand, RelativeSource={RelativeSource AncestorType= UserControl}}" ...>
...
</Button