Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/74: Рейтинг темы: голосов - 74, средняя оценка - 4.82
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771

MVVM postgres

17.06.2020, 10:41. Показов 18150. Ответов 200
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
учу mvvm
появилось много вопросов
я создал модель
Кликните здесь для просмотра всего текста

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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
public  class GlavTables:INotifyPropertyChanged
    {
        public int id { get; set; }
        private DateTime _dateCreating;
        private string _dateTara;
        private string _dateBrutto;
        private string _dateRegistration;
        private double _tara;
        private double _brutto;
        private double _netto;
        private string _typeScales;
        private string _transportNumber;
        private string _driver;
        private string _trailer;
        private string _post;
        private string _product;
        private string _sender;
        private string _payer;
        private string _consignee;
        private string _user;
        private bool _chakRegistration;
        private bool _chakBlok;
        
        public  DateTime dateCreating
        {
            get { return _dateCreating; }
            set
            {
                if (_dateCreating == value)
                    return;
 
                _dateCreating = value;
                OnPropertyChanget("dateCreating");
 
            }
        }
        public string dateTara
        {
            get {return _dateTara; }
            set
            {
                if (_dateTara == value)
                    return;
 
                _dateTara = value;
                OnPropertyChanget("dateTara");
 
            }
        }
        public string dateBrutto
        {
            get { return _dateBrutto; }
            set
            {
                if (_dateBrutto == value)
                    return;
 
                _dateBrutto = value;
                OnPropertyChanget("dateBrutto");
 
            }
        }
        public string dateRegistration
        {
            get { return _dateRegistration; }
            set
            {
                if (_dateRegistration == value)
                    return;
 
                _dateRegistration = value;
                OnPropertyChanget("dateRegistration");
 
            }
        }
        public double tara
        {
            get { return _tara; }
            set
            {
                if (_tara == value)
                    return;
 
                _tara = value;
                OnPropertyChanget("tara");
 
            }
        }
        public double brutto
        {
            get { return _brutto; }
            set
            {
                if (_brutto == value)
                    return;
 
                _brutto = value;
                OnPropertyChanget("brutto");
 
            }
        }
        public double netto
        {
            get { return _netto; }
            set
            {
                if (_netto == value)
                    return;
 
                _netto = value;
                OnPropertyChanget("netto");
 
            }
        }
        public string typeScales
        {
            get { return _typeScales; }
            set
            {
                if (_typeScales == value)
                    return;
 
                _typeScales = value;
                OnPropertyChanget("typeScales");
 
            }
        }
        public string transportNumber
        {
            get { return _transportNumber; }
            set
            {
                if (_transportNumber == value)
                    return;
 
                _transportNumber = value;
                OnPropertyChanget("transportNumber");
 
            }
        }
        public string driver
        {
            get { return _driver; }
            set
            {
                if (_driver == value)
                    return;
 
                _driver = value;
                OnPropertyChanget("driver");
 
            }
        }
        public string trailer
        {
            get { return _trailer; }
            set
            {
                if (_trailer == value)
                    return;
 
                _trailer = value;
                OnPropertyChanget("trailer");
 
            }
        }
        public string post
        {
            get { return _post; }
            set
            {
                if (_post == value)
                    return;
 
                _post = value;
                OnPropertyChanget("post");
 
            }
        }
        public string product
        {
            get { return _product; }
            set
            {
                if (_product == value)
                    return;
 
                _product = value;
                OnPropertyChanget("product");
 
            }
        }
        public string sender
        {
            get { return _sender; }
            set
            {
                if (_sender == value)
                    return;
 
                _sender = value;
                OnPropertyChanget("sender");
 
            }
        }
        public string payer
        {
            get { return _payer; }
            set
            {
                if (_payer == value)
                    return;
 
                _payer = value;
                OnPropertyChanget("payer");
 
            }
        }
        public string consignee
        {
            get { return _consignee; }
            set
            {
                if (_consignee == value)
                    return;
 
                _consignee = value;
                OnPropertyChanget("consignee");
 
            }
        }
        public string user
        {
            get { return _user; }
            set
            {
                if (_user == value)
                    return;
 
                _user = value;
                OnPropertyChanget("user");
 
            }
        }
        public bool chakRegistration
        {
            get { return _chakRegistration; }
            set
            {
                if (_chakRegistration == value)
                    return;
 
                _chakRegistration = value;
                OnPropertyChanget("chakRegistration");
 
            }
        }
        public bool chakBlok
        {
            get { return _chakBlok; }
            set
            {
                if (_chakBlok == value)
                    return;
 
                _chakBlok = value;
                OnPropertyChanget("chakBlok");
 
            }
        }
 
        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanget(string propertyName="")
        {
           
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

создал сервис , который должен заполнять данными я это сделал так
Кликните здесь для просмотра всего текста

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
 public BindingList<GlavTables> LoadData()
        {
            try
            {
                string conn = "Server=192.168.1.111;Port=5432;User Id=postgres;Password=123;Database=postgres111";
                DataSet ds = new DataSet();
                DataTable dt = new DataTable();
                string sql = " SELECT * FROM \"glav\" ";
                NpgsqlConnection ConnLocal = new NpgsqlConnection(conn);
                NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, ConnLocal);
                da.Fill(ds);
                BindingList<GlavTables> glavTavles = new BindingList<GlavTables>();
                for (int i=0; ds.Tables[0].Rows.Count > i;i++)
                {
                    glavTavles.Add(new GlavTables
                {
                    
                    id = Convert.ToInt32(ds.Tables[0].Rows[i][0].ToString()),
                    dateCreating = Convert.ToDateTime(ds.Tables[0].Rows[i][2].ToString()),
                    dateTara = ds.Tables[0].Rows[i][3].ToString(),
                    dateBrutto = ds.Tables[0].Rows[i][4].ToString(),
                    dateRegistration = ds.Tables[0].Rows[i][5].ToString(),
                    tara = nullNo(ds.Tables[0].Rows[i][6].ToString()),
                    brutto = nullNo(ds.Tables[0].Rows[i][7].ToString()),
                    netto = nullNo(ds.Tables[0].Rows[i][8].ToString()),
                    typeScales = ds.Tables[0].Rows[i][11].ToString(),
                    transportNumber = ds.Tables[0].Rows[i][12].ToString(),
                    driver = ds.Tables[0].Rows[i][13].ToString(),
                    trailer = ds.Tables[0].Rows[i][14].ToString(),
                    post = "Пост1",
                    product = ds.Tables[0].Rows[i][16].ToString(),
                    sender = ds.Tables[0].Rows[i][17].ToString(),
                    payer = ds.Tables[0].Rows[i][18].ToString(),
                    consignee = ds.Tables[0].Rows[i][19].ToString(),
                    user = ds.Tables[0].Rows[i][20].ToString(),
                    chakRegistration = true,
                    chakBlok = false
                
                });
                }
                return glavTavles;
            }
            catch
            {  return null; }
        }

после чего в основном классе
Кликните здесь для просмотра всего текста

C#
1
2
3
 GlavTablesIOServices glavTablesIOServices = new GlavTablesIOServices();
            _glavTables = glavTablesIOServices.LoadData();
            dg_glavGrid.ItemsSource = _glavTables;

и тут первый вопрос. можно это сделать без циклов ? например сразу конвертировать в BindingList и как вообще правильно заполнять данными из бд?

дальше я показываю таблицу в view
Кликните здесь для просмотра всего текста

XML
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
 <DataGrid 
 
                x:Name="dg_glavGrid" AutoGenerateColumns="False" >
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding Path=id}" IsReadOnly="True" Header="№"/>
                    <DataGridTextColumn Binding="{Binding Path=dateCreating}" IsReadOnly="True" Header="Дата создания"/>
                    <DataGridTextColumn Binding="{Binding Path=dateTara}" IsReadOnly="True" Header="Дата тара"/>
                    <DataGridTextColumn Binding="{Binding Path=dateBrutto}" IsReadOnly="True" Header="Дата брутто"/>
                    <DataGridTextColumn Binding="{Binding Path=dateRegistration}" IsReadOnly="True" Header="Дата оформления"/>
                    <DataGridTextColumn Binding="{Binding Path=tara}" IsReadOnly="True" Header="Тара"/>
                    <DataGridTextColumn Binding="{Binding Path=brutto}" IsReadOnly="True" Header="Брутто"/>
                    <DataGridTextColumn Binding="{Binding Path=netto}" IsReadOnly="True" Header="Нетто"/>
                    <DataGridTextColumn Binding="{Binding Path=typeScales}" IsReadOnly="True" Header="Тип весов"/>
                    <DataGridTextColumn Binding="{Binding Path=transportNumber}" IsReadOnly="True" Header="Т/С"/>
                    <DataGridTextColumn Binding="{Binding Path=driver}" IsReadOnly="True" Header="Водитель"/>
                    <DataGridTextColumn Binding="{Binding Path=trailer}" IsReadOnly="True" Header="Прицеп"/>
                    <DataGridTextColumn Binding="{Binding Path=post}" IsReadOnly="True" Header="Имя поста"/>
                    <DataGridTextColumn Binding="{Binding Path=product}" IsReadOnly="True" Header="Товар"/>
                    <DataGridTextColumn Binding="{Binding Path=sender}" IsReadOnly="True" Header="Отправитель"/>
                    <DataGridTextColumn Binding="{Binding Path=payer}" IsReadOnly="True" Header="Плательщик"/>
                    <DataGridTextColumn Binding="{Binding Path=consignee}" IsReadOnly="True" Header="Получатель"/>
                    <DataGridTextColumn Binding="{Binding Path=user}" IsReadOnly="True" Header="Пользователь"/>
                    <DataGridCheckBoxColumn Binding="{Binding Path=chakRegistration, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True" Header="Оформление"/>
                    <DataGridCheckBoxColumn Binding="{Binding Path=chakBlok, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True" Header="Доступность"/>
                </DataGrid.Columns>
            </DataGrid>
 
        </Grid>
 
    </Grid>

и снова вопрос. мне нужно добавлять данные в BindingList и при событии добавления/удаления/изменения делать изменения в бд? Или просто делать запросы в бд update/insert и после этого заново заполнять данными? второе звучит проще и логичней для меня.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.06.2020, 10:41
Ответы с готовыми решениями:

Mvvm
Форумчане помогите разобраться есть простенькая модель public partial class Category:ViewModelBase { private int...

x:Name в MVVM
Добрый день, как обращаться к объектам из VM по их x:Name? Например, у меня есть канвас в который я докидываю картинки по нажатию...

MVVM
Здравствуйте, я в среде WPF нахожусь очень мало, посмотрел книжки, решил читать Мэтью Макдональда, стоит ли мне сразу изучать MVVM или...

200
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
02.04.2021, 21:10  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Тестовый проект добавил в репозиторий
не получается отменить теперь фиксацию
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
02.04.2021, 21:24
Цитата Сообщение от onimor Посмотреть сообщение
не получается отменить теперь фиксацию
Вы, наверное, параллельно внесли изменения, без синхронизации.
Там можно слить изменения - но это геморрой.
Клонируйте заново репозиторий, перенесите внесённые изменения из локального репозитория и заново сделайте фиксацию.
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
02.04.2021, 21:33  [ТС]
Элд Хасп, все вроде... попробуйте вытянуть снова
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
02.04.2021, 21:42
Цитата Сообщение от onimor Посмотреть сообщение
все вроде... попробуйте вытянуть снова
Реп (локальный) пока не трогайте.
А то опять бардак получится.
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
02.04.2021, 21:49  [ТС]
Элд Хасп, ничего не делаю
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
02.04.2021, 22:04
onimor, локальный реп уничтожьте и клонируйте Гит заново.

Добавлено через 2 минуты
onimor, Не понял о какой ошибке вы пишет.
Исключение же нормально у вас отлавливается.
В try-catch показывается ошибка
C#
217
218
219
220
221
222
            catch (Exception ex)
            {
                Dialogs.MessageBox($"{ex.Message}");
                //показываем диалог для входа в программу
                EntryVisibleDialog = true;
            }
Добавлено через 20 секунд
Приложение не разваливается, нормально работает.

Добавлено через 1 минуту
Очень много, конечно, косяков.

В ViewModel не должно быть никаких UI элементов.
А у вас там:
C#
65
66
67
68
69
70
71
        private UserControl _settingUC;
        ///<summary>UC  настроек</summary>
        public UserControl SettingUC
        {
            get => _settingUC;
            set => Set(ref _settingUC, value);
        }
Добавлено через 3 минуты
Свойства-коллекции ObservableCollection у вас сделано мутабельным:
C#
114
115
116
117
118
119
120
121
        private ObservableCollection<PostDto> _collectionOfPosts = new();
 
        ///<summary>UC  настроек</summary>
        public ObservableCollection<PostDto> CollectionOfPosts
        {
            get => _collectionOfPosts;
            set => Set(ref _collectionOfPosts, value);
        }
А должно быть "Только для Чтения":
C#
114
115
        public ObservableCollection<PostDto> CollectionOfPosts { get; }
            = new ObservableCollection<PostDto>();
Добавлено через 2 минуты
По хорошему вызов всех MessageBox и Dialog тоже надо из VM убрать.

Добавлено через 43 секунды
И сама основная VM очень перегружена.
Лучше разбить на несколько независимых или вложенных.
1
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
02.04.2021, 22:07  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Приложение не разваливается, нормально работает.
клонировал , запускаю и..

0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
02.04.2021, 22:11
В Модели сохраняете постоянно единственный экземпляр DbContext:
C#
15
       private readonly PostgresDBContext postgresDBContext;
Так нельзя делать.
DbContext - это не коннектор или адаптер подключения к БД.
Это просто преобразователь IQueryable в SQL запросы.
Его надо создать, материализовать, и потом уничтожить.
Используя один и тот же экземпляр можете нахватать непонятных багов в эксплуатации.
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
02.04.2021, 22:13  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Очень много, конечно, косяков.
это да
Цитата Сообщение от Элд Хасп Посмотреть сообщение
В ViewModel не должно быть никаких UI элементов
как тогда показывать внутри окна разные UC
Цитата Сообщение от Элд Хасп Посмотреть сообщение
И сама основная VM очень перегружена.
Была идея сделать приложение с 1 окном. Главное окно, в котором будут разные UC типо pages.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
02.04.2021, 22:14
Цитата Сообщение от onimor Посмотреть сообщение
запускаю и..
У вас что, на этой строке останавливается выполнение?
У вас похоже в настройках Студи где-то включено останавливаться на любом исключении.
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
02.04.2021, 22:16  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Так нельзя делать.
DbContext - это не коннектор или адаптер подключения к БД.
да я уже понял. пока не было времени переделать

Добавлено через 1 минуту
Цитата Сообщение от Элд Хасп Посмотреть сообщение
У вас что, на этой строке останавливается выполнение?
У вас похоже в настройках Студи где-то включено останавливаться на любом исключении.
Да , останавливается. Не останавливается на любом только на этом . Остальное ловиться
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
02.04.2021, 22:18
Цитата Сообщение от onimor Посмотреть сообщение
как тогда показывать внутри окна разные UC
Это дело View.
VM может переключать Контент - записывать в него разные типы, в том числе дочерние VM.
А View для каждого типа будет вызывать своё Представление.

Добавлено через 16 секунд
В том числе и UserControl.

Добавлено через 1 минуту
Цитата Сообщение от onimor Посмотреть сообщение
Да , останавливается. Не останавливается на любом только на этом . Остальное ловиться
Ещё раз проверил.
У меня всё работает Ок.
Без каких либо вылетов, остановок.
1
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
02.04.2021, 22:20  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
VM может переключать Контент - записывать в него разные типы, в том числе дочерние VM
так она и засовывает в
C#
1
public UserControl SettingUC
View настроек, который прибинден в View

Добавлено через 56 секунд
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Ещё раз проверил.
У меня всё работает Ок.
Без каких либо вылетов, остановок.
Похоже что-то со студией...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
02.04.2021, 22:26
Цитата Сообщение от onimor Посмотреть сообщение
останавливается
Облазил все настройки - не смог найти из-за чего может останавливаться.

Возможно вам придётся тему именно с эти вопросом задать.

Или Студию снести и заново установить.
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
02.04.2021, 22:29  [ТС]
Элд Хасп,
Буквально неделю назад переустанавливал (
Вроде обновление было . Попробую завтра обновиться , может пропадёт
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
02.04.2021, 22:44
Цитата Сообщение от onimor Посмотреть сообщение
View настроек, который прибинден в View
Не View, а VM настроек.

Если вы делаете в нормальном Решении, то VM у вас расположена в проекте в котором нет ссылки на Controls.
И в нём, в принципе, невозможно использовать UserCOntrol и другие UI элементы.
Все типы начинаz от Visual НЕЛЬЗЯ использовать в ViewModel.

Добавлено через 1 минуту
Цитата Сообщение от onimor Посмотреть сообщение
Вроде обновление было . Попробую завтра обновиться , может пропадёт
Не в обновлении дело.
У меня все обновления автоматом заливаются.

Где-то какие-то настройки нарушены.
Попробуйте восстановить настройки по умолчанию - может поможет.

Добавлено через 11 минут
Вот видео как у меня работает:
1
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
02.04.2021, 22:49  [ТС]
Элд Хасп, спасибо. хорошо, Завтра попробую, но они и так дефолтные.

можно вопрос по поводу UC.

Допустим у меня есть 3 кнопки, которые переключают основной контент в окне . В роли контента 3 UC .

Я бы в основной view, с кнопками, расположил UC и прибиндил к нему свойство. в которое из vm засовывал нужный uc по нажатию. Получается подобие преключения между pages .
Как тогда по другому сделать? Если это не правильно

Плюсом в зависимости от другооо выбора у одного из uc будет меняться DataContext. Можно из Model через локатор передавать нужную vm . Так правильно будет?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
02.04.2021, 23:24
Цитата Сообщение от onimor Посмотреть сообщение
Как тогда по другому сделать? Если это не правильно
Здесь зависит от самой задачи.
Как связанны Контексты Данных этих UC между собой и с основной VM?

Если они никак не связаны, то переключение Представлений - это чисто View задача и VM для этого использовать не надо.

Если же это реакция на изменение основной VM, то тогда надо по командам менять свойство в VM.
А View по типу в этом свойстве создаст нужное представление.
В самом простом случае это делается с помощью Шаблонов Данных по умолчанию.
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
03.04.2021, 08:53  [ТС]
Элд Хасп, главное окно и его vm отвечает за вход в программу , переключение между постами и показ разных uc с параметрами журналами и прочее.
Как только пост выбран то главное окно показывает внутри себя основной uc, в котором будут таблица, камеры и другие данные.
Так вот какие именно камеры и данные будут использоваться зависит от выбора поста в главном окне.

Я сначала хотел каждый раз при выборе делать новую vm и туда передавать пост. Она бы прогружала все нужное , а uc остаётся таким же. Но щас я уже думаю сделать какое нибудь событие смены поста и тогда уже vm будет не новая, а просто внутри все менять и не будет связана с главным окном и его vm.

Добавлено через 9 минут
Если в главном окне нажать к примеру параметры. То текущий uc с камерами и данными меняется на uc с параметрами. После применений параметров uс с камерами и данными возвращается , но уже прогружает эти параметры и в зависимости от них показывает камеры и какие нибудь данные.

Добавлено через 1 минуту
По сути поменялись настройки текущего поста
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
03.04.2021, 08:59
onimor, мне не понятны ваши объяснения.
Покажите схематически разбивку окна на регионы в различных режимах.

Добавлено через 1 минуту
Цитата Сообщение от onimor Посмотреть сообщение
Так вот какие именно камеры и данные будут использоваться зависит от выбора поста в главном окне.
VM прогружает выбранный пост.
View создаёт для него нужное представление.
Зачем же VM для этого самой использовать UI элементы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.04.2021, 08:59

MVVM
Добрый день! Пытаюсь написать программу в стиле MVVM. Вопрос такой: как передать SelectedItem TreeView из xaml с помощью Binding в...

Model в MVVM
Доброго времени суток. Начал изучать MVVM и даже что-то получается сделать, но не могу сообразить, что должно быть в Model? Программа...

Mvvm datagrid ef
Здравствуйте форумчане, у меня такая проблема есть приложение При выделении datagrid биндю Selecteditem в textboxы мои ...

WPF MVVM
Привет всем! Изучаю патерн MVVM. Не могу понять как реализовать ее, если допустим мне необходимо одно и тоже окно использовать для разных ...

MVVM патерн
Всем привет. Уже писал по поводу данного стиля программирования, более менее разобрался, но некоторые вещи не понятны. Допустим у меня...


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

Или воспользуйтесь поиском по форуму:
140
Ответ Создать тему
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru