![](/img/trans.png)
[英]how to bind custom class collections to wpf datagrid combobox (multiselected)
[英]WPF DataGrid bind to custom class
我認為解決方案應該很簡單。 我想要完成的只是顯示我的自定義類型的通用列表中包含的數據。 我只是在嘗試顯示數據,不需要任何類型的數據操作,並且我對最簡單的解決方案感興趣。 第一個網格工作正常,可以顯示數據,但是,我無法填充第二個網格。 您能為我指出正確的方向嗎? 在網上找不到任何類似內容。 謝謝
這是我的兩個數據網格:
<DataGrid x:Name="grdMyData" HorizontalAlignment="Left" Margin="78,78,0,0" VerticalAlignment="Top" Height="94" Width="321"/>
<DataGrid x:Name="grdMyData2" ItemsSource="{Binding XPath=Car}" HorizontalAlignment="Left" Height="101" Margin="78,198,0,0" VerticalAlignment="Top" Width="321">
</DataGrid>
后面的代碼:
private List<Car> myCars = new List<Car>();
private List<Vehicle> myVehicles = new List<Vehicle>();
private class Vehicle
{
public Car MyCar { get; set; }
}
private class Car
{
public string Type { get; set; }
public string Color { get; set; }
public int DoorsNo { get; set; }
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
var car1 = new Car(){Type = "hatchback", Color = "blue", DoorsNo = 5};
var car2 = new Car() { Type = "sedan", Color = "red", DoorsNo = 4 };
var car3 = new Car() { Type = "sedan", Color = "blach", DoorsNo = 4 };
myCars.Add(car1);
myCars.Add(car2);
myCars.Add(car3);
grdMyData.ItemsSource = myCars;
var vehicle1 = new Vehicle() {MyCar = car1};
var vehicle2 = new Vehicle() {MyCar = car2};
var vehicle3 = new Vehicle() {MyCar = car3};
myVehicles.Add(vehicle1);
myVehicles.Add(vehicle2);
myVehicles.Add(vehicle3);
grdMyData2.DataContext = myVehicles;
}
這是檢索汽車清單的最簡單方法,還是有更好的選擇
private List<Car> GetVehicleCars()
{
var vehicleCars = new List<Car>();
foreach (Vehicle v in myVehicles)
{
vehicleCars.Add(v.MyCar);
}
return vehicleCars;
}
grdMyData2.ItemsSource = GetVehicleCars();
我想這就是你想要的。 只需將其復制並粘貼到WPF應用程序中即可。 我對代碼進行了一些更改,我想您將能夠理解它。
請注意,這是非常丑陋的代碼,並且永遠不要編寫這樣的代碼。 我給出這個丑陋,令人不快的答案,以使代碼與您編寫的內容相似。
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<DataGrid Grid.Row ="0" x:Name="grdMyData" HorizontalAlignment="Left" VerticalAlignment="Top" />
<DataGrid Grid.Row ="1" x:Name="grdMyData2" HorizontalAlignment="Left" VerticalAlignment="Top"></DataGrid>
<Button Grid.Row="2" Click="ButtonBase_OnClick">PRESS ME</Button>
</Grid>
以及后面的代碼:
namespace WpfApplication1
{
public partial class MainWindow : Window
{
//private List<Car> myCars = new List<Car>();
private List<Vehicle> myVehicles = new List<Vehicle>();
private class Vehicle
{
public Car MyCar { get; set; }
}
private abstract class Car
{
public string Type { get; set; }
public string Color { get; set; }
public int DoorsNo { get; set; }
}
private class SimpleCar : Car { }
private class FancyCar : Car { }
public MainWindow()
{
InitializeComponent();
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
var car1 = new SimpleCar() { Type = "hatchback", Color = "blue", DoorsNo = 5 };
var car2 = new SimpleCar() { Type = "sedan", Color = "red", DoorsNo = 4 };
var car3 = new SimpleCar() { Type = "sedan", Color = "blach", DoorsNo = 4 };
var car4 = new FancyCar() { Type = "fancy", Color = "white", DoorsNo = 3 };
var car5 = new FancyCar() { Type = "veryFancy", Color = "yellow", DoorsNo = 3 };
//myCars.Add(car1);
//myCars.Add(car2);
//myCars.Add(car3);
var vehicle1 = new Vehicle() { MyCar = car1 };
var vehicle2 = new Vehicle() { MyCar = car2 };
var vehicle3 = new Vehicle() { MyCar = car3 };
var vehicle4 = new Vehicle(){MyCar = car4};
var vehicle5 = new Vehicle(){MyCar = car5};
myVehicles.Add(vehicle1);
myVehicles.Add(vehicle2);
myVehicles.Add(vehicle3);
myVehicles.Add(vehicle4);
myVehicles.Add(vehicle5);
var onlySimpleCars = from vehicle in myVehicles
where (vehicle.MyCar.GetType() == typeof(SimpleCar))
select vehicle.MyCar;
var allCars = from vehicle in myVehicles
select vehicle.MyCar;
grdMyData.ItemsSource = onlySimpleCars.ToList();
grdMyData2.ItemsSource = allCars.ToList();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.