我想将按钮放入 DataGrid 的单元格 ListBox 中。我在 DataGrid 周围搜索了一下,但只发现了两件事:
- 使用 DataGridTemplateColumn 并在模板中设置命令
- 使用 DataGridHyperLinkColumn 并设置事件处理程序
我尝试了第一个变体(当我单击按钮时,什么也没有发生,如果我在没有 ListBox 作为按钮的情况下使用它):
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding diffs}">
<ListBox.ItemTemplate>
<DataTemplate>
<Button Command="{Binding ElementName=Root,
Path=DataContext.viewSimpleRoute, Mode=OneTime}"
CommandParameter="{Binding}">
aaa
</Button>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
第二个变体对我来说不可用,因为我想在 DataGrid 的单元格中创建几个命令绑定(或事件处理程序)。这样我只能重写 DataGridHyperlinkColumn.ElementStyle 的样式并只设置一个事件处理程序(因为我知道我不能在这里设置命令)。
更新
<DataTemplate DataType="{x:Type tdm:TVZ+SimpleTvzDiffModel}">
<StackPanel Orientation="Vertical">
<Button Width="100" Height="23"
Command="{Binding ElementName=Root, Path=DataContext.viewSimpleRoute, Mode=OneTime}"
CommandParameter="{Binding}">
WORKS
</Button>
<DataGrid ItemsSource="{Binding diffRoutes}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Маршруты">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Width="100" Height="23"
Command="{Binding ElementName=Root, Path=DataContext.viewSimpleRoute, Mode=OneTime}"
CommandParameter="{Binding}">
DOES NOT WORK
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
为什么?