У меня проблема с привязкой в XAML. У меня есть DataGrid, который имеет ListBox кнопок внутри. Мне нужно привязать параметр команды кнопок к идентификаторам элементов DataGrid. Я попытался использовать RelativeSource, присвоив имя скрытому столбцу с идентификатором и пытаясь связать столбец datacontext, но ничего не работает. Я также пытался привязать SelectedItem в DataGrid, тогда команда работает нормально, но CanExecute нет, так как каждая кнопка обновляется в соответствии с выбранной строкой, а не строкой, в которой она фактически находится.
Вот мой код:
Вид:
<DataGrid
ItemsSource="{Binding Orders}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Order date" Binding="{Binding OrderDate}" />
<materialDesign:MaterialDataGridTextColumn Header="Status" Binding="{Binding Status}"/>
<materialDesign:MaterialDataGridTextColumn Header="Last update" Binding="{Binding LastUpdate}"/>
<materialDesign:MaterialDataGridTextColumn Header="Managed by" Binding="{Binding SomePerson}"/>
<materialDesign:MaterialDataGridTextColumn Header="Number" Binding="{Binding SomeNumber}"/>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="{Binding ShowDetailsCommandViewModel.Name}" Command="{Binding ShowDetailsCommandViewModel.Command}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Actions">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding Actions}">
<ListBox.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Name}" Command="{Binding Command}"
CommandParameter="THIS SHOULD BE BINDED TO ORDERVIEWMODEL.ID"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
ViewModels:
public class MyOrdersViewModel
{
public MyOrdersViewModel()
{
}
public IList<OrderViewModel> Orders { get; set; }
}
public class OrderViewModel
{
public OrderViewModel()
{
}
public int Id { get; private set; }
public DateTime OrderDate { get; private set; }
public string Status { get; private set; }
public DateTime LastUpdate { get; private set; }
public string SomePerson { get; private set; }
public int SomeNumber { get; private set; }
public CommandViewModel ShowDetailsCommandViewModel { get; set; }
private bool showItems;
public bool ShowItems
{
get { return showItems; }
set
{
showItems = value;
RaisePropertyChanged();
}
}
public IList<CommandViewModel> Actions { get; private set; }
}
}
public class CommandViewModel
{
public CommandViewModel(string name, ICommand command)
{
Name = name;
Command = command;
}
public string Name { get; set; }
public ICommand Command { get; set; }
}
Мне нужно привязать OrderViewModel.Id к параметру OrderViewModel.Actions.Command.
Как я могу это сделать?