好的,所以我试图在我的应用程序中实现一个相当简单的功能。我想有一个正在运行的进程列表(按其进程名称,ID列出),当我点击列表中的一个进程时,更新一些标签,其中包含关于该进程的信息(同样,进程名称,ID等)那)。问题绑定到WPF列表框的进程数组
在查看DataBinding与MSDN的MSDN文档后,我创建了自己的自定义类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所有正在运行的进程的列表,而是将第一个进程的名称中的每个字符看作是列表中的单独条目,而没有其他内容。 Screenshot
我不知道发生了什么,虽然我确信我正在做一些非常愚蠢的事情,因为我对WPF开发和数据绑定非常陌生。
感谢您的回复。我会进一步研究MVVM模式,之前已经听说过它,但从来没有详细研究它。当我实现你的更改并将其作为'ItemsSource =“{Binding}”'列表填充,但没有任何条目有任何文本,任何想法如何去解决这个问题? –
这是因为你应该在你的ComboBox中设置一个DisplayMemberPath =“ProcessName”......(假设ProcessName是属性,代表了Process类中的进程名) –