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

MVVM postgres

17.06.2020, 10:41. Показов 18186. Ответов 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
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
22.03.2021, 20:11
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от onimor Посмотреть сообщение
вместо мсчбоксов в репозитории должны быть события, которые будут уведомлять model , которая будет уведомлять vm , чтоб показать диалог?
Нет.
На этом месте код "общения" с хранилищем.
В вашем случае с БД.

События нужны там где происходит обновление данных (состояния Модели).
Здесь же просто получить или сохранить все данных.
Никакого обновления нет.
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
22.03.2021, 20:18  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
События нужны там где происходит обновление данных (состояния Модели).
понятно. просто не понял зачем они там (мсчбоксы в ропозитории)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
22.03.2021, 20:31
Цитата Сообщение от onimor Посмотреть сообщение
понятно. просто не понял зачем они там
Я не стал разбираться с вашим кодом работы с БД и чтобы не было ошибок сделал такие "заглушки".

Добавлено через 1 минуту
Цитата Сообщение от onimor Посмотреть сообщение
(мсчбоксы в ропозитории)
А так, их там, конечно, и не должно быть.
MessageBox - это тоже уровень View? как любое иное взаимодействие с пользователем.
1
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
24.03.2021, 12:53  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я не стал разбираться с вашим кодом работы с БД и чтобы не было ошибок сделал такие "заглушки".
перенес, есть подозрение что криво
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
24.03.2021, 14:02
Цитата Сообщение от onimor Посмотреть сообщение
перенес, есть подозрение что криво
Конечный код там же?
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
24.03.2021, 14:14  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Конечный код там же?
да в той же ветке
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
24.03.2021, 16:30
Цитата Сообщение от onimor Посмотреть сообщение
есть подозрение что криво
Нормально.
Работу с БД не проверял - у меня сервер не загружен.
Чуть изменил реализацию свойств VM: надо использовать метод Set(ref ...) для присвоения значений.

Можно сделать сохранение свойств сразу при их изменении.
Но есть нюанс со слишком частым обращением к БД.
При вводе значения метод будет вызывать на каждый символ.


Так же, как вариант, для типов со множеством свойств, которые ещё м и меняться могут, часто вместо DTO используют словарь string-object или string-string.
1
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
25.03.2021, 09:17  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Можно сделать сохранение свойств сразу при их изменении.
Думаю по кнопке нормально + при закрытии PopupBox c настройками

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Так же, как вариант, для типов со множеством свойств, которые ещё м и меняться могут, часто вместо DTO используют словарь string-object или string-string.
Щас буду переделывать основную ветку . Попробую через словари

Пока что разбираюсь почему крашится открытие диалога

Добавлено через 19 минут
уже понял, опечаточка вышла в view
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
29.03.2021, 12:12  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
самым удобным способом работы с БД является EF
Не получается , что-то перейти на EF
APP
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        private ServiceProvider serviceProvider;
 
        public App()
        {
            ServiceCollection services = new ServiceCollection();
            ConfigureServices(services);
            serviceProvider = services.BuildServiceProvider();
        }
 
        private void ConfigureServices(ServiceCollection services)
        {
            services.AddDbContext<SQLiteDBContext>(options =>
            {
                options.UseSqlite("Data Source = setting.db");
            });
 
            services.AddSingleton<MainWindow>();
            services.AddSingleton<MainWindowsVM>();
            services.AddSingleton<SettingVM>();
        }
класс setting
C#
1
2
3
4
5
6
7
8
9
10
11
12
 [Keyless]
    public class Settings
    {
        public string LocalIp { get; set; }
        public string LocalPort { get; set; }
        public string LocalDBName { get; set; }
        public string LocalLog { get; set; }
        public string LocalPass { get; set; }
        public bool Online { get; set; }
        public string OnlineLog { get; set; }
        public string OnlinePass { get; set; }
    }
класс с конекстом
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
 public class SQLiteDBContext:DbContext
    {
        #region конструктор
        public SQLiteDBContext(DbContextOptions<SQLiteDBContext> options) : base(options)
        {
            Database.EnsureCreated();
        }
        #endregion
 
        #region Public properties
        public DbSet<Settings> Setting { get; set; }
        #endregion
 
        #region Overridden method
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Settings>().HasData(GetSettings());
            base.OnModelCreating(modelBuilder);
        }
        #endregion
 
 
        #region Private method
        private List<Settings> GetSettings()
        {
            return new List<Settings>
            {
              new Settings { LocalIp="LocalHost",LocalPort="5432", LocalDBName="pgWeight",LocalLog="postgres",LocalPass="",  Online=false, OnlineLog="",OnlinePass=""}
            };
           
        }
        #endregion
    }
}
тут Database.EnsureCreated(); и возникает ошибка System.NullReferenceException: "Object reference not set to an instance of an object."
сам файл создается , но таблица уже нет. не могу понять где именно null. смотрел в дебаге вроде все есть и строки и внутри данные есть

Добавлено через 49 минут
что-то не то в работе без id, когда есть id то все нормально
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
29.03.2021, 14:30
Цитата Сообщение от onimor Посмотреть сообщение
Не получается , что-то перейти на EF
Я по проблем БД мало, что могу подсказать.
Попросим Usaga помочь.
Если не откликнется, то создайте тему в соответствующем разделе.
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
29.03.2021, 17:01  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я по проблем БД мало, что могу подсказать.
Можно еще вопрос по поводу Dictionary. не совсем уверен как сделать.

Просто был разговор про словари для настроек.

SettingModel принимает SQLiteDBContext,
получает настройки из sqlite, делает connectSTR для PostgresDBContext + 2 метода GetSetting,SetSetting.

Имеет смысл для настроек в SettingViewModel делать Dictionary , когда SettingModel возвращает настройки ? мне кажется проще из List достать, показать и обратно вернуть List для сохранения настроек. Или там есть какой-то профит?
0
Эксперт .NET
 Аватар для Usaga
14731 / 9507 / 1362
Регистрация: 21.01.2016
Сообщений: 35,856
29.03.2021, 17:05
Цитата Сообщение от onimor Посмотреть сообщение
Просто был разговор про словари для настроек.
Чё-то такое себе решение. Как пить дать, вы каждый пункт настроек знаете по имени, типу и смыслу. Так может сразу класс под настройки завести, где каждой настройке будет своё свойстов в классе соответствовать? Как бы, у вас язык со статической типизацией, надо бы это использовать, а не игнорировать и писать как на PHP в начале двухтысячных...
1
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
29.03.2021, 17:30  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Так может сразу класс под настройки завести, где каждой настройке будет своё свойстов в классе соответствовать?
типо статичный класс ,с статичными свойствами? model туда настройки засовывает из базы, а vm оттуда забирает?
Или обычный и его копию передавать?

Добавлено через 13 минут
Или вы про Properties.Settings
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
29.03.2021, 18:09
Usaga, если не трудно посмотрите выше пост onimor с какими-то проблемами по созданию БД,

Добавлено через 16 минут
Цитата Сообщение от onimor Посмотреть сообщение
Просто был разговор про словари для настроек.
В той же БД как вы собираетесь сохранять все настройки?
Сделать таблицу с огромным количеством полей для каждой настройки?
Скажем так - довольно неэффективное решение.

Более практичное два поля:
Название настройки;
string или byte[] представление значения настройки.
Иногда имеет смысл добавить и поле с именем типа настройки.

На уровне приложения эта таблица парсится в словарь: ключ - название настройки, значение - значение настройки.
Значения можно хранить в string, byte[].
Но более удобным будет упаковка значений в object.

Если посмотрите код Properties.Settings (по F12), то увидите, что там тоже для хранения настроек используется словарь Dictionary<string, object>.
1
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
29.03.2021, 18:42  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
На уровне приложения эта таблица парсится в словарь
На уровне приложения это в app при запуске? и потом отдавать куда нужно словарь?

Добавлено через 14 минут
Извиняюсь конечно за кучу тупых вопросов , уже хочется до конца во всем разобраться и поставить точки
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
29.03.2021, 19:09
Цитата Сообщение от onimor Посмотреть сообщение
На уровне приложения это в app при запуске? и потом отдавать куда нужно словарь?
Я думаю это самое логичное.
Если, конечно, это общие настройки всего приложения.
1
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
29.03.2021, 19:42  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если, конечно, это общие настройки всего приложения.
если подключение к modbus , базам и прочее такое тоже относиться к общим то да.

Спасибо еще раз, теперь на много понятнее стало после разделения на разные проекты.
Когда dev ветку до конца переделаю вас не затруднит посмотреть , все нормально или еще нужно обратить внимание на что-то?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
29.03.2021, 20:18
Цитата Сообщение от onimor Посмотреть сообщение
Когда dev ветку до конца переделаю вас не затруднит посмотреть , все нормально или еще нужно обратить внимание на что-то?
Конечно
0
Эксперт .NET
 Аватар для Usaga
14731 / 9507 / 1362
Регистрация: 21.01.2016
Сообщений: 35,856
30.03.2021, 06:31
Цитата Сообщение от onimor Посмотреть сообщение
типо статичный класс ,с статичными свойствами?
Обычный класс с обычными свойствами.

Цитата Сообщение от onimor Посмотреть сообщение
что-то не то в работе без id, когда есть id то все нормально
Так добавьте ID в таблицу настроек. Не надо усложнять.
1
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
30.03.2021, 06:46  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Обычный класс с обычными свойствами.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
На уровне приложения эта таблица парсится в словарь
в итоге словарь лучше делать или класс?

Добавлено через 43 секунды
Цитата Сообщение от Usaga Посмотреть сообщение
Так добавьте ID в таблицу настроек. Не надо усложнять.
пока так и оставил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.03.2021, 06:46

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru