Это очень упрощенный ответ, ваш сценарий, скорее всего, будет гораздо более сложным, но он иллюстрирует то, что я написал в комментарии выше.
MainWindow.xaml
<Window x:Class="TestWpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow"
Height="450"
Width="800">
<Grid>
<ListView HorizontalContentAlignment="Center" ItemsSource="{Binding Path=PeopleList}" SelectionMode="Single">
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Width="180" DisplayMemberBinding="{Binding Type}" />
<GridViewColumn Width="180" DisplayMemberBinding="{Binding FullName}" />
<GridViewColumn Width="180">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Content="SELECT" Width="180" Command="{Binding SelectCommand}" />
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
MainWindow.xaml.cs
using System.Collections.ObjectModel;
using System.Windows;
namespace TestWpfApplication
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public Collection<object> PeopleList => new Collection<object>
{
new Person(),
new Student(),
new Person(),
new Student()
};
}
}
Person.cs
using System;
using Prism.Commands;
namespace TestWpfApplication
{
internal class Person
{
DelegateCommand selectCommand;
public string Type => "Person";
public string FullName => "My name is person";
public DelegateCommand SelectCommand
{
get => selectCommand ?? (selectCommand = new DelegateCommand(Select, CanSelect));
}
public bool CanSelect()
{
return true;
}
public void Select()
{
Console.WriteLine("Person Clicked");
}
}
}
Student.cs
using System;
using Prism.Commands;
namespace TestWpfApplication
{
internal class Student
{
DelegateCommand selectCommand;
public string Type => "Student";
public string FullName => "My name is student";
public DelegateCommand SelectCommand
{
get => selectCommand ?? (selectCommand = new DelegateCommand(Select, CanSelect));
}
public bool CanSelect()
{
return false;
}
public void Select()
{
Console.WriteLine("Student Clicked");
}
}
}
Если вы хотите, чтобы какая-то логика выполнялась в MainWindow.xaml.cs , вы можете иметь событие в Person.cs & Student.cs и «подключите» их, когда объекты будут созданы и добавлены в коллекцию PeopleList
.