Я изучаю WPF и начинаю практиковать правильную привязку данных, и мне нужно составить список принтеров, установленных на компьютере (локальный + сеть), и сгруппировать их соответствующим образом в соответствии с логическим значением «Локальные и сетевые».
На данный момент я выполняю следующие действия при загрузке:
VB:
Class MainWindow
Public Property printerlist As New ObservableCollection(Of String)
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
InitializeComponent()
Me.DataContext = Me
'WMI Stuff
Dim objMS As System.Management.ManagementScope = New System.Management.ManagementScope(ManagementPath.DefaultPath)
objMS.Connect()
'Query Printers
Dim objquery As SelectQuery = New SelectQuery("SELECT * FROM Win32_Printer")
Dim objMOS As ManagementObjectSearcher = New ManagementObjectSearcher(objMS, objquery)
Dim objMOC As System.Management.ManagementObjectCollection = objMOS.Get()
For Each Printers As ManagementObject In objMOC
If CBool(Printers("Local")) Then
printerlist.Add(Printers("Name"))
End If
If CBool(Printers("Network")) Then
printerlist.Add(Printers("Name"))
End If
Next
End Sub
XAML:
<ComboBox x:Name="Printer_Select" ItemsSource="{Binding Path=printerlist}"/>
Это успешно отображает список локальных принтеров и сортирует их по локальным, а затем по сетям.
Я создал более продвинутый комбинированный список ниже:
<ComboBox x:Name="Printer_Select" ItemsSource="{Binding Path=printerlist}">
<ComboBox.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Type}"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ComboBox.GroupStyle>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding DeviceName}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Моя проблема в том, что я пытаюсь выяснить, как на самом деле связать отдельные значения из запроса WMI с последующими значениями в объекте списка принтеров.
Может кто-нибудь объяснить, как это сделать с помощью VB (я могу найти несколько примеров на C #, но я не так уж уверен с таким переводом между языками) - я перевожу несколько программ WinForms в WPF и пока не хочу менять внутреннюю часть VB.
Вся помощь приветствуется.