ボタンの DataGrid のセル ListBox に入れたいです。私は DataGrid をググりましたが、次の 2 つしか見つかりませんでした。
- テンプレートで DataGridTemplateColumn と set コマンドを使用する
- 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 のセルにいくつかのコマンド バインディング (またはイベント ハンドラー) を作成したいので、2 番目のバリアントは使用できません。このようにして、DataGridHyperlinkColumn.ElementStyle のスタイルのみを書き換えて、1 つのイベント ハンドラーのみを設定できます (ここでコマンドを設定できないことがわかっているため)。
アップデート
<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>
なんで?