2015-08-12 2 views
0

У меня есть два окна. В окне первого вставить данные в класс 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 
}); 

Затем во втором окна Я хочу получить доступ к этому же классу (QuoteData), который я вставил данные в и затем установите ExternalLength из QuoteData на мой лейбл под названием lblExternalLengthAmount.

Пример: lblExternalLengthAmount.Content = ExternalLength;

Я попытался создать новый экземпляр QuoteData на втором окне, но все значения затем resest к нулевой.

Есть ли способ получить доступ к этим значениям? Любые советы будут оценены :)

+0

Да, это так. Вы должны использовать статический класс. –

+0

Вам нужно будет установить его в статической форме или в каком-то статическом контейнере/коллекции, и было бы полезно использовать оператор блокировки при доступе к нему, чтобы ваши потоки изменений были безопасными. – CalebB

+0

Сделайте шаг назад и попробуйте реализовать шаблон дизайна, это мой совет. –

ответ

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 также

+0

Это не двусторонняя связь. Лучше всего передать func в конструктор, который хранится и возвращает window1, но если вы сохраните его в поле, оно больше не является окном1, а другим экземпляром window1. Или еще лучше, func . – CalebB

+0

Это не новый экземпляр Window1. Это будет тот же самый экземпляр. и если я напишу func , как я должен назвать эту функцию? Это функция Window2 или Window1? Или как эта функция получит экземпляр Window1 из Window2? снова то же самое, вам нужно создать экземпляр и вызов, который не даст вам те же данные экземпляра. В таком случае вам нужно сделать функцию, которая возвращает экземпляр Window1 как статический. Выполнение функции static неверно. – Akansha

+0

'Func getWin = new Func (() => {return this;}); Window2 win2 = новый Window2 (getWin1); public Window2 (Func getWin1) {this.GetWindow1 = getWin1; } 'Там вы идете. Вышеприведенный код вернет исходное окно 1. Предполагаю, что мне не нужно говорить вам, как вызвать делегат Func. ;) – CalebB