Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 1
Регистрация: 16.01.2013
Сообщений: 5
1

Не работает передача данных между окнами WPF

17.01.2013, 09:16. Показов 2378. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, помогите, пожалуйста.
Разбираюсь с WPF.
Есть Окно со списком. Надо выбрать элемент (AT) и в другом окне отредактировать его свойства.
Элемент передаётся, пошагово проверяла, в конструкторе обновляются свойства, но после wEditAT.ShowDialog() элемент ATEdit = null;
В чём моя ошибка? Помогите!

Метод из модуля окна Client:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
  private void ClickMethodEdit()
        {
            // создаю экземпляр окна редактирования элемента AT     
            wEditAT = new WindowEditAT();
// создаю модуль окна ViewModelEditAT(SelectedAT) и передаю ему выбранный элемент
            vmEditAT = new ViewModelEditAT(SelectedAT);            
// присваиваю Datacontext созданный ViewModel
            wEditAT.DataContext = vmEditAT;
// открываю окно          
            wEditAT.ShowDialog();
// перегружаю список в Client
            ViewATListLoad();
        }
 
Вот ViewModelEditAT :
 
  public class ViewModelEditAT : ObjectBase
    {
        #region Fields
 
        private AT _atEdit;
 
        ATRepository _ATRepository = new ATRepository(DataLayerStatics.NewContext());
 
        #endregion
 
        #region Properties
   
 
        public AT ATEdit
        {
            get
            {
                if (_atEdit == null)
                {
                    _atEdit = new AT();
                    _atEdit.IdEnterprise = 1;
                    _atEdit.IdFuel = 1;
                }
                return _atEdit;
            }
            set
            {
                if (_atEdit == value) return;
                _atEdit = value;
                FirePropertyChangedEvent("ATEdit");
            }
        }
 
        public ICommand ClickCommandSave { get; private set; }
 
        #endregion
 
        #region Method
 
        private void ClickMethodSave()
        {
            FirePropertyChangedEvent("ATEdit");
            if (SelectCarModel == null)
            {
                MessageBoxResult result = MessageBox.Show("Выберите модель АТ!");
            }
            else
            {
                if (ATEdit.Id == 0)
                    using (var r = new ATRepository(DataLayerStatics.NewContext()))
                    {
                        r.New(ATEdit);
                        r.Dispose();
                    }
                else
                {
                    _ATRepository.Edit(ATEdit);
                    _ATRepository.Dispose();
                }
                ATEdit = null;
            }
 
        }
 
        private void ATLoad()
        {
            if (ATEdit != null && ATEdit.Id!=0)
            {
                _selectTypeAT = ATEdit.CarModel.TypeAT;
                _selectCarModel = ATEdit.CarModel;
 
                FirePropertyChangedEvent("ListTypeAT");
                FirePropertyChangedEvent("ListCarModel");
                FirePropertyChangedEvent("ATEdit");
            }
        }
 
        #endregion
 
        #region Constructor
 
        public ViewModelEditAT()
        {
            ClickCommandSave = new Command(arg => ClickMethodSave());
            ATLoad();  
        }
 
        public ViewModelEditAT(AT atEdit)
        {
             ATEdit = _ATRepository.GetById(atEdit.Id);
//              ATEdit = atEdit;  
             ATLoad();       
        }
        #endregion
    }
 
 public class ATRepository : BaseRepository<AT>, IDisposable
    {
        public ATRepository(UATEntities context) : base(context) { }
        public ATRepository() : base() { } 
        private ObservableCollection<AT> _atList = null;
 
        public override ObservableCollection<AT> GetList()
        {
            if (DesignModeStatic.IsInDesignModeStatic)
            {
                if (_atList == null) _atList = new ObservableCollection<AT>();
                _atList.Add(new AT()
                {
                    Id = 999,
                    GosNumber = "45-58",
                    InvNumber = "999999"
                });
                _atList.Add(new AT()
                {
                    Id = 9990,
                    GosNumber = "99-77",
                    InvNumber = "444"
                });
                return _atList;
            }
            else
                return new ObservableCollection<AT>
                (from item in Context.ATs
                     .Include("CarModel")
                 orderby item.CarModel.TypeAT.Name
                 select item);
        }
 
        public AT GetById(int id)
        {
            return Context.ATs.FirstOrDefault(x => x.Id == id);
        }
 
        public bool Delete(AT delObj)
        {
            bool result = false;
            Context.DeleteObject(GetById(delObj.Id));
            result = Context.SaveChanges() > 0;
            return result;
        }
        
        public bool New(AT newObj)
        {
            bool result = false;
            Context.ATs.AddObject(newObj);
            result = Context.SaveChanges() > 0;
            return result;
        }
 
        public bool Edit(AT edObj)
        {
            bool result = false;
            AT _edObj = GetById(edObj.Id);
            _edObj = edObj;
            //Context.ATs.AddObject(newObj);
            result = Context.SaveChanges() > 0;
            return result;
        }
        
 
    }
Добавлено через 20 часов 34 минуты
Доброе утро! Смотрю статистику - 44 просмотра и ни одного ответа ((
Неужели здесь отвечают только на простые вопросы (типа не работает Show)?
Или моя задача не решаема? .Net - Гуру! Вы где? Помогите!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2013, 09:16
Ответы с готовыми решениями:

Передача данных между окнами
Как из одного окна передать список в другое окно? С обычными переменами проблем нет, передавал...

Передача данных между окнами
Есть два окна Window1 и Window2. В Window2 производятся вычисления в результате которых имеем...

Передача данных между окнами
Есть два окна с одинаковым набором элементов: &lt;Grid&gt; &lt;TextBox Height=&quot;23&quot;...

Передача данных между окнами в рамках паттерна MVVM
Доброго времени суток, уважаемые форумчане! Я абсолютный новичок в программировании, который...

5
1453 / 845 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
17.01.2013, 12:31 2
Дело в том что ваша проблемма решается только с дебаггером. Нужно идти пошагово и смотреть в какой момент ваше свойство срывается! На взгляд я определить не могу этого. Если можете, то выложите сюда проект или часть проекта.
Я вот например работаю с Silverlight и с WPF не работал уже около года. Не помню я все нюансы. Может быть ваш объект пересоздаётся. Может вы где это свойство неправильно присваиваете.
1
0 / 0 / 1
Регистрация: 16.01.2013
Сообщений: 5
17.01.2013, 12:36  [ТС] 3
Спасибо, за внимание к моей проблеме, выкладываю проект.
Вложения
Тип файла: rar WpfApplicationUAT.rar (235.3 Кб, 47 просмотров)
0
1453 / 845 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
17.01.2013, 15:22 4
Файл : WindowEditAT.xaml

XML
1
2
3
4
5
6
7
8
9
<Window x:Class="WpfApplicationUAT.View.WindowEditAT"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="WindowEditAT" Height="339" Width="478" WindowStartupLocation="CenterScreen">
    <Grid DataContext="{Binding Source={StaticResource viewModelEditAT}}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="119" />
            <ColumnDefinition Width="337*" />
        </Grid.ColumnDefinitions>
строчка:
XML
1
<Grid DataContext="{Binding Source={StaticResource viewModelEditAT}}">
не кажется вам подозрительной?

Может стоит убрать DataContext?

Добавлено через 5 минут
Да и из App.xaml тоже это чудо уберите.
1
0 / 0 / 1
Регистрация: 16.01.2013
Сообщений: 5
17.01.2013, 15:38  [ТС] 5
О!!! Спасибо!!! Заработало!!! Я это делала, чтоб в дизайн тайме данные отображались вот в чём подвох!
Спасибо ОГРОМНОЕ!!!!!!!!
0
1453 / 845 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
17.01.2013, 15:40 6
Да незашто!!!
1
17.01.2013, 15:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2013, 15:40
Помогаю со студенческими работами здесь

Передача данных между Окнами
Добрый день! Есть приложение в Matlab Gui в главном окне по нажатию кнопки открывается...

Передача данных между окнами
Есть страница index.html в которой есть код: var Authorize =...

Передача данных между окнами MFC
Здраствуйте. При написании программы на MFC столкнулся с проблемой. Кратко, у меня есть Головное и...

Передача данных между классами/окнами
Всем доброе время суток! Уже неделю бьюсь над одной проблемой: не могу оформить грамотную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru