【问题标题】:Accessing class data from another window从另一个窗口访问类数据
【发布时间】:2015-08-12 11:47:38
【问题描述】:

我有两个窗口。在 first 窗口中,我将数据插入到 QuoteData 类中,代码如下

using (TruckServiceClient client = new TruckServiceClient())
{
     quoteFinalize = await client.GetQuoteAsync(new QuoteData
     {
         BodyTypeId = cmbBodyType.GetDisplayItemId(),
         ChassisId = cmbChassisCab.GetDisplayItemId(),
         FloorId = cmbFloorSpecification.GetDisplayItemId(),
         ExternalLength = externalLength,
         ExternalWidth = externalWidth,
         ExternalHeight = externalHeight
});

然后在 second 窗口中,我想访问我插入数据的同一个类 (QuoteData),然后将 QuoteDataExternalLength 设置为名为 lblExternalLengthAmount 的标签.

示例:lblExternalLengthAmount.Content = ExternalLength;

我尝试在第二个窗口上创建QuoteData 的新实例,但所有值随后都重置为null

有没有办法访问这些值?任何建议将不胜感激:)

【问题讨论】:

  • 是的。你必须使用静态类。
  • 您需要以静态形式或在某种静态容器/集合中进行设置,并且在访问它时最好使用 lock 语句以确保您的修改线程安全。
  • 退后一步,尝试实施设计模式是我的建议。

标签: c# wpf linq wcf class


【解决方案1】:

您可以将构造函数中的 Window1 对象传递给 Window2

Window1.xaml.cs

 Window2 dialog = new Window2(this);//this is current window(Window1) object

在 Window2.xaml.cs 中

public Window2(Window1 obj)
        {

            InitializeComponent();
            //obj is your Window1 object
        }

对 obj 所做的任何更改也会反映到 Window1

【讨论】:

  • 这不是双向通信。更好的方法是将 func 传递给存储并返回 window1 的构造函数,但如果将其存储在字段中,则它不再是 window1 而是不同的 window1 实例。或者更好的是,func.
  • 不是Window1的新实例。这将是同一个实例。如果我写一个 func 我应该如何调用该函数?那是 Window2 函数还是 Window1?或者该函数将如何从 Window2 获取 Window1 的实例?同样的事情,你需要创建一个实例并调用它不会给你相同的实例数据。在这种情况下,您需要将返回 Window1 实例的函数设为静态。将函数设为静态是不正确的。
  • Func<Window1> getWin = new Func<Window1>(() => { return this; }); Window2 win2 = new Window2(getWin1); public Window2(Func<WIndow1> getWin1) { this.GetWindow1 = getWin1; } 你去。上面的代码将返回原始窗口 1。我假设我不需要告诉你如何调用 Func 委托。 ;)
  • @Akansha - 完美运行,非常感谢!我什至不需要使用这个类。
  • @CalebB 据我所知,您的代码做同样的事情。如果您认为是更好的解决方案,请将其发布为答案
猜你喜欢
  • 2016-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多