Ich habe ein Problem mit der Bindung von Daten von einem List<>
zu einem Listview
in WPF. Die Zeile ListView
ist leer, aber die Listenwerte werden in List<>
festgelegt. Wenn ich es mit einer ListBox
mache, sehe ich die Werte in einer Zeile.C# wpf eine Liste an eine Listview binden - Listview Zeile ist leer
Blick auf den Code für die Liste:
public static List<string> ShowUSB()
{
var usbDevices = GetUSBDevices();
List<string> Devices = new List<string>();
foreach (var usbDevice in usbDevices)
{
string[] DeviceIDs = usbDevice.DevicePNPDeviceID.Split(new Char[] { '\\', '&', '_' });
usbDevice.DeviceVID = DeviceIDs[2];
usbDevice.DevicePID = DeviceIDs[4];
Devices.Add(usbDevice.DeviceManufacturer + usbDevice.DeviceName + usbDevice.DeviceVID + usbDevice.DevicePID);
}
return Devices;
}
Hier ist der XAML-Code für die Bindung:
<GroupBox Header="available Devices" Margin="1,223,1,75" SnapsToDevicePixels="True" Grid.ColumnSpan="2">
<ListView x:Name="lvAddedDevices" Margin="0,0,0,0" >
<ListView.View>
<GridView>
<GridViewColumn x:Name="colManufacturer" Width="240" Header="Manufacturer" DisplayMemberBinding="{Binding DeviceManufacturer}"/>
<GridViewColumn x:Name="colDeviceName" Width="240" Header="Device Name" DisplayMemberBinding="{Binding DeviceName}"/>
<GridViewColumn x:Name="colPNPVID" Width="200" Header="VID ID" DisplayMemberBinding="{Binding DeviceVID}"/>
<GridViewColumn x:Name="colPNPPID" Width="200" Header="PID ID" DisplayMemberBinding="{Binding DevicePID}"/>
<!--<GridViewColumn x:Name="colDeviceStatus" Width="200" Header="Device Status"/>-->
</GridView>
</ListView.View>
</ListView>
</GroupBox>
Und die Bindung Aufruf im Code hinter:
internal void LoadDevicesforList()
{
lvAddedDevices.ItemsSource = USBHandler.ShowUSB();
}
Hier ist die komplette Klasse:
public class USBHandler
{
public static List<string> ShowUSB()
{
var usbDevices = GetUSBDevices();
List<string> Devices = new List<string>();
foreach (var usbDevice in usbDevices)
{
string[] DeviceIDs = usbDevice.DevicePNPDeviceID.Split(new Char[] { '\\', '&', '_' });
usbDevice.DeviceVID = DeviceIDs[2];
usbDevice.DevicePID = DeviceIDs[4];
Devices.Add(usbDevice.DeviceManufacturer + usbDevice.DeviceName + usbDevice.DeviceVID + usbDevice.DevicePID);
}
return Devices;
}
static List<USBDeviceInfo> GetUSBDevices()
{
List<USBDeviceInfo> devices = new List<USBDeviceInfo>();
ManagementObjectCollection collection;
using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_PnpEntity where Manufacturer Like 'ATMEL%' or Manufacturer Like 'Microchip%' or Manufacturer Like 'Texas%' "))
collection = searcher.Get();
if (collection.Count > 0)
{
foreach (var device in collection)
{
devices.Add(new USBDeviceInfo(
(string)device.GetPropertyValue("Manufacturer"),
(string)device.GetPropertyValue("Name"),
(string)device.GetPropertyValue("PNPDeviceID")
));
}
}
collection.Dispose();
return devices;
}
}
class USBDeviceInfo
{
public USBDeviceInfo(string deviceManufacturer, string deviceName, string devicePNPDeviceID)
{
DeviceManufacturer = deviceManufacturer;
DeviceName = deviceName;
DevicePNPDeviceID = devicePNPDeviceID;
}
public string DeviceManufacturer { get; private set; }
public string DeviceName { get; private set; }
public string DevicePNPDeviceID { get; private set; }
public string DeviceVID { get; set; }
public string DevicePID { get; set; }
}
Wie erwarten Sie alle DisplayMemberBindings funktionieren, wenn die ItemsSource-Auflistungselemente nur Zeichenfolgen sind? Wahrscheinlich wollten Sie der ItemsSource-Eigenschaft eine 'List' zuweisen. –
Clemens
Ich denke, wenn Sie diese Zeile ändern "Liste Devices = neue Liste ();' zu dieser 'Liste Devices = neue Liste ();' Sie werden mindestens auf dem richtigen Weg sein. –
KSib
Hallo, die Werte sind nur Strings :-( – Grizzly1969