问题描述
此处是屏幕截图的样子。只是空着。
XAML:
ComboBox Name="comboBox" RenderTransformOrigin="0.502,-0.751" Margin="129,112,111,217" SelectionChanged="comboBox_SelectionChanged"/>
C#:
{
public MainWindow()
{
InitializeComponent();
}
private void comboBox_SelectionChanged(object sender,SelectionChangedEventArgs e)
{
comboBox.Items.Clear();
Process[] MyProcess = Process.GetProcesses();
for (int i = 1; i < MyProcess.Length; i++)
comboBox.Items.Add(string.Format("{0} - {1}",MyProcess[i].ProcessName,MyProcess[i].Id));
}
}
解决方法
SelectionChanged
事件不起作用,因为它仅在选择更改时才触发。您可以改用DropDownOpened
事件。
ComboBox Name="comboBox" RenderTransformOrigin="0.502,-0.751" Margin="129,112,111,217" DropDownOpened="ComboBox_OnDropDownOpened"/>
您的事件处理程序将如下所示:
private void ComboBox_OnDropDownOpened(object? sender,EventArgs e)
{
comboBox.Items.Clear();
var processes = Process.GetProcesses();
for (var i = 1; i < processes.Length; i++)
comboBox.Items.Add($"{processes[i].ProcessName} - {processes[i].Id}");
}
另一种方法是公开在构造函数中初始化并绑定到XAML中ItemsSource
的{{1}}的进程集合。然后您可以根据需要更新集合,例如通过计时器或用户触发的命令定期更新。
您可以采用以下选项之一来实施集合:
- 替换整个集合,这需要实现
INotifyPropertyChanged
并在更新流程时引发PropertyChanged
事件 - 使用
ObservableCollection<T>
来存储进程并通过修改集合来更新进程,例如添加和删除流程或清除流程。