Хорошо, поэтому я пытаюсь реализовать довольно простую функцию в своем приложении. Я хочу иметь список запущенных процессов (перечисленных по имени процесса, идентификатору и т. Д.), И когда я нажимаю на процесс в списке, обновляю несколько меток с информацией об этом процессе (опять же, имя процесса, идентификатор, что-то вроде что).
Изучив документы MSDN для DataBinding с коллекциями, я создал свой собственный класс ProcessList, который наследуется от ObservableCollection. Класс теперь совершенно пустой, я раньше возился с ним, пытаясь заставить вещи работать, так что я думаю, что я мог бы просто работать прямо с ObservableCollection, но в любом случае. Вот что у меня на данный момент:
public partial class MainWindow : Window
{
private Dictionary<int, Injector> injectors;
public Process[] processes;
public ProcessList procList;
public MainWindow()
{
procList = new ProcessList();
foreach (var p in Process.GetProcesses())
{
procList.Add(p);
}
InitializeComponent();
processGrid.DataContext = procList;
}
private void button_refresh_processes_Click(object sender, RoutedEventArgs e)
{
processes = Process.GetProcesses();
}
}
}
И соответствующий XAML:
<Grid Name="processGrid" Margin="0,21,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="348*" />
<ColumnDefinition Width="145*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="147*" />
<RowDefinition Height="42*" />
</Grid.RowDefinitions>
<Button Content="Inject" Grid.Row="1" Height="23" HorizontalAlignment="Center" Margin="0,0,0,0" Name="button_inject" VerticalAlignment="Center" Width="75" />
<ListBox Height="147" HorizontalAlignment="Left" Name="process_list" VerticalAlignment="Top" Width="348" ItemsSource="{Binding Path=ProcessName}" />
<Grid Grid.Column="1" Height="147" HorizontalAlignment="Left" Name="grid2" VerticalAlignment="Top" Width="145">
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<Label Content="Process ID:" Grid.RowSpan="1" Height="28" HorizontalAlignment="Left" Margin="0" Name="label_pid" VerticalAlignment="Center" />
<Label Content="PID" Grid.Column="1" Grid.RowSpan="1" Height="28" HorizontalAlignment="Right" Margin="0" Name="label_pid_value" VerticalAlignment="Center" />
</Grid>
<Button Content="Refresh" Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="6,9,0,0" Name="button_refresh_processes" VerticalAlignment="Top" Width="75" Click="button_refresh_processes_Click" />
</Grid>
Проблема, с которой я сталкиваюсь в настоящее время, состоит в том, что вместо отображения списка всех запущенных в настоящее время процессов по их ProcessName, он вместо этого перечисляет то, что представляется каждым символом из имени первого процесса, как отдельные записи в списке, и ничего более. Скриншот
Я понятия не имею, что происходит, хотя я уверен, что делаю что-то чрезвычайно глупое, так как я очень плохо знаком с разработкой WPF и привязкой данных.