如何将datagrid项连接到另一个类

时间:2014-05-07 20:16:16

标签: c# wpf xaml datagrid

我是新手,也是C#编程的相对初学者。我的小程序试图拼凑我的问题。它应该有三个窗口(它是德语但很容易理解)。在第一个它应该有4辆汽车,价格,功率和模型在数据网格我命名为DGrid。当你点击下面的按钮弹出第二个窗口时,你可以选择你想要什么类型的保险,如果你打算每年,或每半年,等等...,当你点击弹出第三个窗口下方的按钮,根据您的车型(您在第一个窗口中选择的)和您在第二个窗口中选择的保险,您需要支付的金额。无论如何,我做了前2个窗口,它正常工作,但我遇到的问题是,我不知道如何连接我在第一个窗口(类)中选择的汽车与第三个窗口(它进行计算) 。 如果我写Autos x =(Autos)DGrid.SelectedItem;在第三个窗口中,它表示它不识别DGrid名称(在第一个窗口中初始化)。

所以问题是:如何让第三个窗口使用第一个窗口中的选定项目进行计算?

这是代码 - 第一个窗口;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Versicherungsrechner
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            Autos a1 = new Autos("Ferrari", 220, 50000);
            Autos a2 = new Autos("Lamborghini", 320, 150000);
            Autos a3 = new Autos("Maseratti", 520, 250000);
            Autos a4 = new Autos("BMW", 250, 55000);
            InitializeComponent();
            Autos[] auto = new Autos[] { a1, a2, a3, a4 };

            DGrid.ItemsSource = auto; 
        }

        public void OnClick(object sender, RoutedEventArgs e)
        {
            Details d = new Details();
            d.Owner = this;
            d.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
            d.ShowDialog();
        }
    }
}

第二窗口:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Versicherungsrechner
{
    /// <summary>
    /// Interaction logic for Details.xaml
    /// </summary>
    public partial class Details : Window
    {
        public Details()
        {
            InitializeComponent();
        }

        public void AnzeigenClick(object sender, RoutedEventArgs e)
        {
            Ausgabe a = new Ausgabe();
            a.Owner = this;
            a.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
            a.ShowDialog();
        }
    }
}

第三个:

    namespace Versicherungsrechner
{
    /// <summary>
    /// Interaction logic for Ausgabe.xaml
    /// </summary>
    public partial class Ausgabe : Window
    {
        public Ausgabe()
        {
            InitializeComponent(); 
        } 
    }
}

和Car类:

    namespace Versicherungsrechner
{
    public class Autos
    {
       public string modell { get; set; }
       public double leistung { get; set; }
       public double preis { get; set; }

       public Autos(string modell, double leistung, double preis)
       {
           this.modell = modell;
           this.leistung = leistung;
           this.preis = preis;
       }


    }
}

1 个答案:

答案 0 :(得分:0)

如果您更改此课程......

public partial class Ausgabe : Window
{
    public Ausgabe()
    {
        InitializeComponent(); 
    } 
}

......对此...

public partial class Ausgabe : Window
{
    public Autos SelectedAuto {get;set}
    public Ausgabe()
    {
        InitializeComponent(); 
    } 
}

然后您可以更改此代码...

    public void AnzeigenClick(object sender, RoutedEventArgs e)
    {
        Ausgabe a = new Ausgabe();
        a.Owner = this;
        a.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
        a.ShowDialog();
    }

......对此...

    public void AnzeigenClick(object sender, RoutedEventArgs e)
    {
        Ausgabe a = new Ausgabe();
        a.SelectedAuto = DGrid.SelectedValue as Autos;
        a.Owner = this;
        a.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
        a.Setup(); // to do
        a.ShowDialog();
    }

这将让Aufgabe班级有所帮助。您可以使用其他类重复此过程。

强制性最佳实践注意:在数据绑定和Xaml开始流行之前,这是人们在2006/2007左右用完的方法。在这个时代,这种方法被认为是有风险的,因为它会带来操作风险。但目前它回答了你的问题,让你继续你的项目。