Вы можете использовать синтаксис DataGridTemplateColumn и Caliburn Micro, чтобы использовать кнопку для каждой строки в вашей сетке данных.
Для первой части вашего вопроса вы можете добавить кнопку в каждую строку вашей таблицы данных, используя DataGridTemplateColumn,
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="View" cal:Message.Attach="[Event Click]=[ViewUser($dataContext)]"></Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Полное определение DataGrid в вашем XAML будет выглядеть следующим образом.
<DataGrid ItemsSource="{Binding Users}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Id}" Header="Id"/>
<DataGridTextColumn Binding="{Binding UserName}" Header="UserName"/>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="View" cal:Message.Attach="[Event Click]=[ViewUser($dataContext)]"></Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
cal:Message.Attach="[Event Click]=[ViewUser($dataContext)]"
будет использовать синтаксис Caliburn.Micro Action, чтобы вы могли вызывать метод по щелчкусобытие каждой кнопки.Параметр $ dataContext позволяет передавать соответствующий выбранный элемент данных в качестве параметра методу.
Ваш метод ViewModel будет выглядеть как
public void ViewUser(object user)
{
// Do work
}
Подробнее о Caliburn.Micro Actions можно прочитать подробнее здесь .