簡體   English   中英

WPF DataGrid綁定到自定義類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM