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

Программа висит при попытке открыть ComboBox

07.11.2018, 16:47. Показов 1617. Ответов 7

Author24 — интернет-сервис помощи студентам
Доброго времени суток, разрабатываю приложение , возникла следующая проблемма:

На форме есть несколько ComboBox, и в один из них забиваю порядка 65000 элементов. Когда пытаюсь его открыть, программа висит около 2-2,5 минут. Предполагаю что проблемма в количестве элементов, вернее в том что их подтягивает с черз биндинг, если пытаюсь двинутся вниз по списку опять зависание((((

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

Спасибо)))

Добавлено через 53 секунды
MainWindow.xaml:
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
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
<Window x:Class="AKS16_AKS17_CalibrationGui_NewRev.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:AKS16_AKS17_CalibrationGui_NewRev"
        xmlns:con="clr-namespace:AKS16_AKS17_CalibrationGui_NewRev.ServiceClasses.UniversallyServiceClasses"
        xmlns:src="clr-namespace:AKS16_AKS17_CalibrationGui_NewRev.ViewModel"
        mc:Ignorable="d"
        Title="{Binding Path=STitle}" Height="500" Width="1000" MaxHeight="1000" MaxWidth="2000" MinHeight="500" MinWidth="1000" x:Name="WindowView" Closed="WindowView_Closed">
    <!--Window resources-->
    <Window.Resources>
        <con:SizeConvertorForView x:Key="SizeConverter"/>
        <con:VisibilityConverterForView x:Key="VisibilityConverter"/>
        <!--Style difinition for user controls-->
        <Style x:Name="Headers" TargetType="TextBlock" BasedOn ="{StaticResource  BaseText}"/>
        <Style TargetType="ComboBox" >
            <Setter Property="Margin" Value="5"/>
        </Style>
        <!--Style triggers for user controls-->
        <Style TargetType="Menu">
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Selector.IsSelected" Value="True"/>
                </Trigger>
                <Trigger Property="IsMouseOver" Value="False">
                    <Setter Property="Selector.IsSelected" Value="False"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <!--Main markup container-->
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="20*"/>
            <RowDefinition Height="40*"/>
            <RowDefinition Height="20*"/>
            <RowDefinition x:Name="ButtonRow" Height="20*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition x:Name="ButtonColumn" Width="2*"/>
            <ColumnDefinition Width="3*"/>
        </Grid.ColumnDefinitions>
        <!--Logo-->
        <Image Source="/Resources/bo_logo_mit-slogan.png"
               Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Right" Margin="10"/>
        <!--Menus definitions-->
        <StackPanel Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Orientation="Horizontal">
            <Menu Background="White">
                <MenuItem Header="File" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}">
                    <MenuItem Header="Save Encoder Config" Command="{Binding Path=CommandSaveEncoderConfig}"/>
                    <MenuItem Header="Load Encoder Config" Command="{Binding Path=CommandLoadEncoderConfig}"/>
                    <Separator/>
                    <MenuItem Header="Calibration Setup" Command="{Binding Path=CommandCalibrationSetup}"/>
                    <MenuItem Header="Preference" Command="{Binding Path=CommandPreference}"/>
                    <Separator/>
                    <MenuItem Header="Exit" Command="{Binding Path=CommandExit}"/>
                </MenuItem>
            </Menu>
            <Menu Background="White" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}">
                <MenuItem Header="Tools">
                    <MenuItem Header="Product Information" Command="{Binding Path=CommandProductInformation}"/>
                    <MenuItem Header="Show Protocol Data Packet" Command="{Binding Path=CommandShowProtocolDataPacket}"/>
                    <MenuItem Header="Offset Compensation" Command="{Binding Path=CommandOffsetCompensation}"/>
                    <MenuItem Header="Motor Controller" Command="{Binding Path=CommandMotorController}"/>
                    <MenuItem Header="Serial Port Trigger Signal" Command="{Binding Path=CommandSerialPortTriggerSignal}"/>
                    <MenuItem Header="Sensor Demo" Command="{Binding Path=CommandSensorDemo}"/>
                </MenuItem>
            </Menu>
            <Menu Background="White">
                <MenuItem Header="Help" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}">
                    <MenuItem Header="Send report" Command="{Binding Path=CommandSendReport}"/>
                    <MenuItem Header="About" Command="{Binding Path=CommandAbout}"/>
                </MenuItem>
            </Menu>
        </StackPanel>
        <!--Sensor setup region-->
        <Grid Grid.Column="0" Grid.Row="2">
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <!--Headers-->
            <TextBlock Text="Sensor" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="0" Grid.Row="0" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}"/>
            <TextBlock Text="Size" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="0" Grid.Row="1" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}"/>
            <TextBlock Text="Interface Absolute" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="0" Grid.Row="2" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}"/>
            <TextBlock Text="Interface Incremental" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="0" Grid.Row="3" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}"/>
            <TextBlock x:Name="VariativeComboBox" Text="{Binding Path=SVariativeComboBoxtext}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="0" Grid.Row="4" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}"
                       Visibility="{Binding Path=V_VariativeComboBoxVisibility}"/>
            <!--ComboBoxes-->
            <ComboBox x:Name="SensorType" Grid.Column="1" Grid.Row="0" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}" 
                      ItemsSource="{Binding ComboBoxSensor.Items}"
                      SelectedIndex="0"
                      Text="{Binding ElementName=SensorType, Path=SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
            <ComboBox x:Name="Size" Grid.Column="1" Grid.Row="1" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}" ItemsSource="{Binding ComboBoxSize.Items}" SelectedIndex="1"/>
            <ComboBox x:Name="InterfaceAbsolute" Grid.Column="1" Grid.Row="2" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}"  ItemsSource="{Binding ComboBoxAbsoluteInterface.Items}" SelectedIndex="0"/>
            <ComboBox x:Name="InterfaceIncremental" Grid.Column="1" Grid.Row="3" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}"  ItemsSource="{Binding ComboBoxIncrementalInterface.Items}" SelectedIndex="1"/>
            <ComboBox x:Name="ABZResolution" Grid.Column="1" Grid.Row="4" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}" ItemsSource="{Binding ComboBoxVariables.Items}" AutomationProperties.ItemType="String"
                      />
        </Grid>
        <Grid Grid.Column="0" Grid.Row="3" Margin="10">
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <CheckBox x:Name="InwertedRotation" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Right" VerticalAlignment="Center" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}"/>
            <CheckBox x:Name="SaveRawDatw" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Center" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}"/>
            <TextBlock Text="Inverted Rotation" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}"/>
            <TextBlock Text="Save Raw Data" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}"/>
        </Grid>
        <Grid Grid.Row="4" Grid.Column="0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition/>
            </Grid.RowDefinitions>
            
            <Button Content="Details"
                    x:Name="ButtonDetails"
                    Grid.Column="0"
                    Grid.Row="0"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Center"
                    HorizontalContentAlignment="Center"
                    VerticalContentAlignment="Center"
                    Margin="40,0,0,0"
                    Style="{DynamicResource BaseButton}"
                    Command="{Binding CommandDetails}"
                    Visibility="{Binding Path=VDetailsButton}"/>
            <Button Content="One step calibration" 
                    Grid.Column="1" 
                    Grid.Row="0" 
                    HorizontalContentAlignment="Center" 
                    VerticalContentAlignment="Center" 
                    HorizontalAlignment="Center" 
                    VerticalAlignment="Center" 
                    Style="{DynamicResource BaseButton}"
                    Command="{Binding Path=CommandOneStepCalibration}"/>
        </Grid>
                <Grid Grid.Column="1" Grid.Row="2" Grid.RowSpan="3" Margin="20">
            <UserControl Content="{Binding Path=OrientationOptionControl, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged }" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}"/>
        </Grid>
    </Grid>
 
</Window>
Добавлено через 3 минуты
Сдесь наполняю ComboBoxes:

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using AKS16_AKS17_CalibrationGui_NewRev.ServiceClasses.UniversallyServiceClasses;
 
namespace AKS16_AKS17_CalibrationGui_NewRev.ViewModel
{
    class GUIComboBoxElements: PropertyChangeSupervisor
    {
        private ComboBox cbSensorType;
        public ComboBox CbSensorType
        {
            get { return cbSensorType; }
            set
            {
                cbSensorType = value;
                onPropertyChanged("CbSensorType");
            }
        }
        private ComboBox cbSize;
        public ComboBox CbSize
        {
            get { return cbSize; }
            set
            {
                cbSize = value;
                onPropertyChanged("CbSize");
            }
        }
        private ComboBox cbInterfaceAbsolut;
        public ComboBox CbInterfaceAbsolut
        {
            get { return cbInterfaceAbsolut; }
            set
            {
                cbInterfaceAbsolut = value;
                onPropertyChanged("CbInterfaceAbsolut");
            }
        }
        private ComboBox cbInterfaceIncremental;
        public ComboBox CbInterfaceIncremental
        {
            get { return cbInterfaceIncremental; }
            set
            {
                cbInterfaceIncremental = value;
                onPropertyChanged("CbInterfaceIncremental");
            }
        }
        private ComboBox cbABZResolution;
        public ComboBox CbABZResolution
        {
            get { return cbABZResolution; }
            set
            {
                cbABZResolution = value;
                onPropertyChanged("CbABZResolution");
            }
        }
        private ComboBox cbNumberOfPolePairs;
        public ComboBox CbNumberOfPolePairs
        {
            get { return cbNumberOfPolePairs; }
            set
            {
                cbNumberOfPolePairs = value;
                onPropertyChanged("CbNumberOfPolePairs");
            }
        }
        private List<string> lABZResolution;
        private List<string> lNumberOfPolePairs;
        /// <summary>
        /// Constructor, fills all MainWindow ComboBoxes with default values.
        /// </summary>
        public GUIComboBoxElements()
        {
            Services.FillComboBoxWithItems(out cbSensorType, "AKS16", "AKS17");
            Services.FillComboBoxWithItems(out cbSize, "Large 20-Bit(64/63 Nonius)", "Medium 19-Bit(32/31 Nonius)", "Small 18-Bit(16/15 Nonius)");
            Services.FillComboBoxWithItems(out cbInterfaceAbsolut, "BiSS", "SSI");
            Services.FillComboBoxWithItems(out cbInterfaceIncremental, "None", "ABZ", "UVW", "Step", "CW/CCW");
            lABZResolution = new List<string>();
            for (int i = 4; i<262148; i += 4)
            {
                string s = i.ToString();
                lABZResolution.Add(s);
            }
            Services.FillComboBoxWithItems(out cbABZResolution, lABZResolution);
            lNumberOfPolePairs = new List<string>();
            for (int i = 1; i<17; i++)
            {
                lNumberOfPolePairs.Add(i.ToString());
            }
            Services.FillComboBoxWithItems(out cbNumberOfPolePairs, lNumberOfPolePairs);
        }
        /// <summary>
        /// Adapts ComboBoxItems for actualy selection
        /// </summary>
        /// <param name="selectedItem"></param>
        public void ComboBoxSensorTypeSelectionChanged(ComboBoxItem selectedItem)
        {
            if(((string)(selectedItem.Content)) == "AKS16")
            {
                Services.FillComboBoxWithItems(out cbSize, "Large 20-Bit(64/63 Nonius)", "Medium 19-Bit(32/31 Nonius)", "Small 18-Bit(16/15 Nonius)");
                onPropertyChanged("CbSize");
            }
            else
            {
                Services.FillComboBoxWithItems(out cbSize, "XLarge 24-Bit(1023/1024/992)", "Large 23-Bit(511/512/496)", "Medium 22-Bit(255/256/240)", "Small 21-Bit(127/128/120)");
                onPropertyChanged("CbSize");
            }
        }
    }
}
С помощью этой функции:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
/// <summary>
        /// Fills WPF ComboBox with items
        /// </summary>
        /// <param name="comboBoxToFill">ComboBox to fill</param>
        /// <param name="Items">List of string with items</param>
        public static void FillComboBoxWithItems(out ComboBox comboBoxToFill, List<string> Items)
        {
            comboBoxToFill = new ComboBox();
            for (int i = 0; i<Items.Count; i++)
            {
                comboBoxToFill.Items.Add(Items[i]);
            }
        }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2018, 16:47
Ответы с готовыми решениями:

Программа вылетает при попытке открыть файл
#include&lt;iostream.h&gt; #include&lt;windows.h&gt; #include&lt;conio.h&gt; #include&lt;fstream.h&gt; const int L=31;...

При попытке открыть Калькулятор пишет: не удаётся открыть приложение так как отключен контроль учётных запиcей
При попытке открыть Калькулятор пишет,что не удаётся открыть приложение так как отключен контроль...

При подключении к ноуту внешнего жесткого диска он отображается, но при попытке открыть ноут зависает
есть внешний жесткий диск ,при подключении к ноуту отображается,но при попытке открыть виснет ноут...

Ошибка при попытке открыть изображение
Здравствуйте, помогите пожалуйста. Столкнулся с такой вот проблемой, при попытке открыть любую...

7
4 / 2 / 2
Регистрация: 15.07.2011
Сообщений: 21
07.11.2018, 16:57  [ТС] 2
MainWindow.xaml.cs

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
using AKS16_AKS17_CalibrationGui_NewRev.ViewModel;
using System;
using System.Windows;
using System.Windows.Controls;
 
namespace AKS16_AKS17_CalibrationGui_NewRev
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        MainWindowViewModel vmMainWindow = new MainWindowViewModel();
 
        public MainWindow()
        {
            DataContext = vmMainWindow;
 
            InitializeComponent();
            //Set MainWindowViewModel as datacontext
 
        }
 
        private void SensorType_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            
        }
 
        private void WindowView_Closed(object sender, EventArgs e)
        {
            App.Current.Shutdown();
        }
    }
}
MainWindowViewModel.cs:

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
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
using AKS16_AKS17_CalibrationGui_NewRev.View;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Controls;
using AKS16_AKS17_CalibrationGui_NewRev.ServiceClasses.UniversallyServiceClasses;
using AKS16_AKS17_CalibrationGui_NewRev.UserControls;
using AKS16_AKS17_CalibrationGui_NewRev.Model;
 
namespace AKS16_AKS17_CalibrationGui_NewRev.ViewModel
{
    
    /// <summary>
    /// View model for main window
    /// </summary>
    public class MainWindowViewModel: PropertyChangeSupervisorWindowBased
    {
        private GUIComboBoxElements ComboBoxes;
        private DataModelAKS modelAKS;
 
        /// <summary>
        /// App title for MainWindow header
        /// </summary>
        private string sTitle = "AKS16 and AKS17 Calibration GUI Revision 2.0 ";
        public string STitle
        {
            get { return sTitle; }
            set
            {
                sTitle = value;
                onPropertyChanged("STitle");
            }
        }
        /// <summary>
        /// State holder for selected execution mode.
        /// True = development mode, false = production mode
        /// </summary>
        private bool bDevelopmentMode;
        /// <summary>
        /// bDevelopmentMode property superviser implement set and get methods for bIsInvertedRotation is neccessary for binding between view and data model.
        /// </summary>
        public bool BDevelopmentMode
        {
            get { return bDevelopmentMode; }
            set
            {
                bDevelopmentMode = value;
                onPropertyChanged("BDevelopmentMode");
            }
        }
        /// <summary>
        /// State holder for InvertedRotation property
        /// </summary>
        private bool bIsInvertedRotation = false;
        /// <summary>
        ///  bIsInvertedRotation property superviser implement set and get methods for bIsInvertedRotation is neccessary for binding between view and data model.
        /// </summary>
        public bool BIsInvertedRotation
        {
            get { return bIsInvertedRotation; }
            set
            {
                bIsInvertedRotation = value;
                onPropertyChanged("BIsInvertedRotation");
            }
        }
        /// <summary>
        /// An state holder for property SaveRawData
        /// </summary>
        private bool bIsSaveRawData = false;
        /// <summary>
        /// bIsSaveRawData property superviser implement set and get methods for bIsSaveRawData is neccessary for binding between view and data model.
        /// </summary>
        public bool BIsSaveRawData
        {
            get { return bIsSaveRawData; }
            set
            {
                bIsSaveRawData = value;
                onPropertyChanged("BIsSaveRawData");
            }
        }
        //Commands
        //Menu commands
        //File menu commands
        public ICommand CommandSaveEncoderConfig { get; private set; }
        public ICommand CommandLoadEncoderConfig { get; private set; }
        public ICommand CommandCalibrationSetup { get; private set; }
        public ICommand CommandPreference { get; private set; }
        public ICommand CommandExit { get; private set; }
        //Tools menu commands
        public ICommand CommandProductInformation { get; private set; }
        public ICommand CommandShowProtocolDataPacket { get; private set; }
        public ICommand CommandOffsetCompensation { get; private set; }
        public ICommand CommandMotorController { get; private set; }
        public ICommand CommandSerialPortTriggerSignal { get; private set; }
        public ICommand CommandSensorDemo { get; private set; }
        //Help menu commands
        public ICommand CommandSendReport { get; private set; }
        public ICommand CommandAbout { get; private set; }
        //GUIs itself commands
        public ICommand CommandOneStepCalibration { get; private set; }
        public ICommand CommandDetails { get; private set; }
        //Navigation commands, implimentation of user control OrientationOptionView commands
        public ICommand CommandNext { get; private set; }
        public ICommand CommandPrev { get; private set; }
        public ICommand CommandTest { get; private set; }
        /// <summary>
        /// Exemplar of OrientationOptionView user control
        /// </summary>
        private OrientationOptionUserControl orientationOptionControl;
        /// <summary>
        /// Property change supervizer of OrientationOptionView user control for binding into MainWindowView
        /// </summary>
        public OrientationOptionUserControl OrientationOptionControl
        {
            get { return orientationOptionControl; }
            set
            {
                orientationOptionControl = value;
                onPropertyChanged("OrientationOptionControl");
            }
        }
        private Visibility vDetailsButton;
        public Visibility VDetailsButton
        {
            get { return vDetailsButton; }
            set
            {
                vDetailsButton = value;
                onPropertyChanged("VDetailsButton");
            }
        }
        /// <summary>
        /// Constructor with mode argument
        /// </summary>
        /// <param name="mode">if true = development mode if false = production mode</param>
        public MainWindowViewModel()
        {
            ComboBoxes = new GUIComboBoxElements();
            ComboBoxSensor = ComboBoxes.CbSensorType;
            ComboBoxSize = ComboBoxes.CbSize;
            ComboBoxAbsoluteInterface = ComboBoxes.CbInterfaceAbsolut;
            ComboBoxIncrementalInterface = ComboBoxes.CbInterfaceIncremental;
            ComboBoxPolePairs = ComboBoxes.CbNumberOfPolePairs;
            ComboBoxResolution = ComboBoxes.CbABZResolution;
            ComboBoxVariables = ComboBoxResolution;
            modelAKS = new DataModelAKS();
            VDetailsButton = Visibility.Collapsed;
            // show versions info in Title
            System.Diagnostics.FileVersionInfo vi = System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);
            System.IO.FileInfo fileInfo = new System.IO.FileInfo(vi.FileName);
 
            Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
            DateTime buildDate = new DateTime(2000, 1, 1).AddDays(version.Build).AddSeconds(version.Revision * 2);
            string displayableVersion = $"{version} ({buildDate})";
 
            STitle = STitle + " - Version " + displayableVersion;
#if DEBUG
            STitle = STitle + " - Debug Version";
#endif
            BDevelopmentMode = true;
            //UserControl to show the orientations options
            OrientationOptionControl = new OrientationOptionUserControl();
            //Implements commands
            CommandSaveEncoderConfig = new DelegateCommand(SaveEncoderConfig, CanSaveEncoderConfig);
            CommandLoadEncoderConfig = new DelegateCommand(LoadEncoderConfig, CanLoadEncoderConfig);
            CommandCalibrationSetup = new DelegateCommand(CalibrationSetup, CanCalibrationSetup);
            CommandPreference = new DelegateCommand(Preference, CanPreference);
            CommandExit = new DelegateCommand(Exit, CanExit);
            CommandProductInformation = new DelegateCommand(ProductInformation, CanProductInformation);
            CommandShowProtocolDataPacket = new DelegateCommand(ShowProtocolDataPacket, CanShowProtocolDataPacket);
            CommandOffsetCompensation = new DelegateCommand(OffsetCompensation, CanOffsetCompensation);
            CommandMotorController = new DelegateCommand(MotorController, CanMotorController);
            CommandSerialPortTriggerSignal = new DelegateCommand(SerialPortTriggerSignal, CanSerialPortTriggerSignal);
            CommandSensorDemo = new DelegateCommand(SensorDemo, CanSensorDemo);
            CommandSendReport = new DelegateCommand(SendReport, CanSendReport);
            CommandAbout = new DelegateCommand(About, CanAbout);
            CommandOneStepCalibration = new DelegateCommand(OneStepCalibration, CanOneStepCalibration);
            CommandDetails = new DelegateCommand(Details, CanDetails);
        }
        #region ComboBoxes
        private ComboBox comboBoxVariables;
        public ComboBox ComboBoxVariables
        {
            get { return comboBoxVariables; }
            set
            {
                comboBoxVariables = value;
                onPropertyChanged("ComboBoxVariables");
            }
        }
        private ComboBox comboBoxSensor;
        public ComboBox ComboBoxSensor
        {
            get { return comboBoxSensor; }
            set
            {
                comboBoxSensor = value;
                onPropertyChanged("ComboBoxSensor");
            }
        }
        private ComboBox comboBoxIncrementalInterface;
        public ComboBox ComboBoxIncrementalInterface
        {
            get { return comboBoxIncrementalInterface; }
            set
            {
                comboBoxIncrementalInterface = value;
                onPropertyChanged("ComboBoxIncrementalInterface");
            }
        }
        private ComboBox comboBoxAbsoluteInterface;
        public ComboBox ComboBoxAbsoluteInterface
        {
            get { return comboBoxAbsoluteInterface; }
            set
            {
                comboBoxAbsoluteInterface = value;
                onPropertyChanged("ComboBoxAbsoluteInterface");
            }
        }
        private ComboBox comboBoxResolution;
        public ComboBox ComboBoxResolution
        {
            get { return comboBoxResolution; }
            set
            {
                comboBoxResolution = value;
                onPropertyChanged("ComboBoxResolution");
            }
        }
        private ComboBox comboBoxSize;
        public ComboBox ComboBoxSize
        {
            get { return comboBoxSize; }
            set
            {
                comboBoxSize = value;
                onPropertyChanged("ComboBoxSize");
            }
        }
        private ComboBox comboBoxPolePairs;
        public ComboBox ComboBoxPolePairs
        {
            get { return comboBoxPolePairs; }
            set
            {
                comboBoxPolePairs = value;
                onPropertyChanged("ComboBoxPolePairs");
            }
        }
        #endregion
        private CheckBox checkBoxInvertedRotation;
        public CheckBox CheckBoxInvertedRotation
        {
            get { return checkBoxInvertedRotation; }
            set
            {
                checkBoxInvertedRotation = value;
                onPropertyChanged("CheckBoxInvertedRotation");
            }
        }
        private uint uiSelectedOrientation;
        public uint UiSelectedOrientation
        {
            get { return uiSelectedOrientation; }
            set
            {
                uiSelectedOrientation = value;
                onPropertyChanged("UiSelectedOrientation");
            }
        }
        private bool bFullRangeCalibration;
        public bool BFullRangeCalibration
        {
            get { return bFullRangeCalibration; }
            set
            {
                bFullRangeCalibration = value;
                onPropertyChanged("BFullRangeCalibration");
            }
        }
        private CheckBox checkBoxSaveRawData;
        public CheckBox CheckBoxSaveRawData
        {
            get { return checkBoxSaveRawData; }
            set
            {
                checkBoxSaveRawData = value;
                onPropertyChanged("CheckBoxSaveRawData");
            }
        }
        private string sVariativeComboBoxText;
        public string SVariativeComboBoxtext
        {
            get { return sVariativeComboBoxText; }
            set
            {
                sVariativeComboBoxText = value;
                onPropertyChanged("SVariativeComboBoxtext");
            }
        }
        private Visibility v_VariativeComboBoxVisibility;
        public Visibility V_VariativeComboBoxVisibility
        {
            get { return v_VariativeComboBoxVisibility; }
            set
            {
                v_VariativeComboBoxVisibility = value;
                onPropertyChanged("V_VariativeComboBoxVisibility");
            }
        }
       
        #region Commands
        /// <summary>
        /// Can execute path of Details command.
        /// </summary>
        /// <param name="parameter">Not neccessary parameter, can be useful in deverse implementatins</param>
        /// <returns>true if command can execute or false if not.</returns>
        public bool CanDetails(object parameter = null)
        {
            return false;
        }
        /// <summary>
        /// Execute path of Details command, implements all aktions and command logic.
        /// </summary>
        private void Details()
        {
 
        }
        /// <summary>
        /// Can execute path of SaveEncodingConfig command.
        /// </summary>
        /// <param name="parameter">Not neccessary parameter, can be useful in deverse implementatins</param>
        /// <returns>true if command can execute or false if not.</returns>
        public bool CanSaveEncoderConfig(object parameter = null)
        {
            return false;
        }
        /// <summary>
        /// Execute path of SaveEncoderConfig command, implements all aktions and command logic.
        /// </summary>
        private void SaveEncoderConfig()
        {
 
        }
        /// <summary>
        /// Can execute path of LoadEncoderConfig command.
        /// </summary>
        /// <param name="parameter">Not neccessary parameter, can be useful in deverse implementatins</param>
        /// <returns>true if command can execute or false if not.</returns>
        public bool CanLoadEncoderConfig(object parameter = null)
        {
            return false;
        }
        /// <summary>
        /// Execute path of LoadEncoderConfig command, implements all aktions and command logic.
        /// </summary>
        private void LoadEncoderConfig()
        {
 
        }
        /// <summary>
        /// Can execute path of CalibrationSetup command.
        /// </summary>
        /// <param name="parameter">Not neccessary parameter, can be useful in deverse implementatins</param>
        /// <returns>true if command can execute or false if not.</returns>
        public bool CanCalibrationSetup(object parameter = null)
        {
            return false;
        }
        /// <summary>
        /// Execute path of CalibrationSetup command, implements all aktions and command logic.
        /// </summary>
        private void CalibrationSetup()
        {
 
        }
        /// <summary>
        /// Can execute path of Preference command.
        /// </summary>
        /// <param name="parameter">Not neccessary parameter, can be useful in deverse implementatins</param>
        /// <returns>true if command can execute or false if not.</returns>
        public bool CanPreference(object parameter = null)
        {
            return false;
        }
        /// <summary>
        /// Execute path of Preference command, implements all aktions and command logic.
        /// </summary>
        private void Preference()
        {
 
        }
        /// <summary>
        /// Can execute path of Exit command.
        /// </summary>
        /// <param name="parameter">Not neccessary parameter, can be useful in deverse implementatins</param>
        /// <returns>true if command can execute or false if not.</returns>
        public bool CanExit(object parameter = null)
        {
            return Application.Current != null && Application.Current.MainWindow != null && bDevelopmentMode;
        }
        /// <summary>
        /// Execute path of Exit command, implements all aktions and command logic.
        /// </summary>
        private void Exit()
        {
            Application.Current.Shutdown();
        }
        /// <summary>
        /// Can execute path of ProductInformation command.
        /// </summary>
        /// <param name="parameter">Not neccessary parameter, can be useful in deverse implementatins</param>
        /// <returns>true if command can execute or false if not.</returns>
        public bool CanProductInformation(object parameter = null)
        {
            return false;
        }
        /// <summary>
        /// Execute path of ProductInformation command, implements all aktions and command logic.
        /// </summary>
        private void ProductInformation()
        {
 
        }
        /// <summary>
        /// Can execute path of ShowProtocolDataPacket command.
        /// </summary>
        /// <param name="parameter">Not neccessary parameter, can be useful in deverse implementatins</param>
        /// <returns>true if command can execute or false if not.</returns>
        public bool CanShowProtocolDataPacket(object parameter = null)
        {
            return false;
        }
        /// <summary>
        /// Execute path of ShowProtocolDataPacket command, implements all aktions and command logic.
        /// </summary>
        private void ShowProtocolDataPacket()
        {
 
        }
        /// <summary>
        /// Can execute path of OffsetCompensation command.
        /// </summary>
        /// <param name="parameter">Not neccessary parameter, can be useful in deverse implementatins</param>
        /// <returns>true if command can execute or false if not.</returns>
        public bool CanOffsetCompensation(object parameter = null)
        {
            return false;
        }
        /// <summary>
        /// Execute path of OffsetCompensation command, implements all aktions and command logic.
        /// </summary>
        private void OffsetCompensation()
        {
 
        }
        /// <summary>
        /// Can execute path of MotorController command.
        /// </summary>
        /// <param name="parameter">Not neccessary parameter, can be useful in deverse implementatins</param>
        /// <returns>true if command can execute or false if not.</returns>
        public bool CanMotorController(object parameter = null)
        {
            return true;
        }
        /// <summary>
        /// Execute path of MotorController command, implements all aktions and command logic.
        /// </summary>
        private void MotorController()
        {
            MotorControllerView mc = new MotorControllerView();
            mc.ShowDialog();
        }
        /// <summary>
        /// Can execute path of SerialPortTriggerSignal command.
        /// </summary>
        /// <param name="parameter">Not neccessary parameter, can be useful in deverse implementatins</param>
        /// <returns>true if command can execute or false if not.</returns>
        public bool CanSerialPortTriggerSignal(object parameter = null)
        {
            return true;
        }
        /// <summary>
        /// Execute path of SerialPortTriggerSignal command, implements all aktions and command logic.
        /// </summary>
        private void SerialPortTriggerSignal()
        {
            SignalTriggerView st = new SignalTriggerView();
            st.ShowDialog();
        }
        /// <summary>
        /// Can execute path of SensorDemo command.
        /// </summary>
        /// <param name="parameter">Not neccessary parameter, can be useful in deverse implementatins</param>
        /// <returns>true if command can execute or false if not.</returns>
        public bool CanSensorDemo(object parameter = null)
        {
            return false;
        }
        /// <summary>
        /// Execute path of SensorDemo command, implements all aktions and command logic.
        /// </summary>
        private void SensorDemo()
        {
 
        }
        /// <summary>
        /// Can execute path of SendReport command.
        /// </summary>
        /// <param name="parameter">Not neccessary parameter, can be useful in deverse implementatins</param>
        /// <returns>true if command can execute or false if not.</returns>
        public bool CanSendReport(object parameter = null)
        {
            return false;
        }
        /// <summary>
        /// Execute path of SendReport command, implements all aktions and command logic.
        /// </summary>
        private void SendReport()
        {
 
        }
        /// <summary>
        /// Can execute path of About command.
        /// </summary>
        /// <param name="parameter">Not neccessary parameter, can be useful in deverse implementatins</param>
        /// <returns>true if command can execute or false if not.</returns>
        public bool CanAbout(object parameter = null)
        {
            return true;
        }
        /// <summary>
        /// Execute path of About command, implements all aktions and command logic.
        /// </summary>
        private void About()
        {
            About window = new About();
            window.Show();
        }
        /// <summary>
        /// Can execute path of OneStepCalibration command.
        /// </summary>
        /// <param name="parameter">Not neccessary parameter, can be useful in deverse implementatins</param>
        /// <returns>true if command can execute or false if not.</returns>
        public bool CanOneStepCalibration(object parameter = null)
        {
            return true;
        }
        /// <summary>
        /// Execute path of OneStepCalibration command, implements all aktions and command logic.
        /// </summary>
        private void OneStepCalibration()
        {
            BDevelopmentMode = !BDevelopmentMode;
            if(VDetailsButton == Visibility.Collapsed)
            {
                //ToDo: For Tests
                Window nw = new FormShowProtocolContainer(10, 10, 10, AKS16_AKS17_API.FormShowProtocol.EProtocol.BiSS);
                nw.ShowDialog();
                VDetailsButton = Visibility.Visible;
            }
            else
            {
                //ToDo: For Tests
                Window nw = new FormOffsetCompensationContainer();
                nw.ShowDialog();
                VDetailsButton = Visibility.Collapsed;
            }
           
        }
        #endregion
    }
}
С 85 по 91 строку в GUIComboBoxElements создаю лист айтемсов
0
Модератор
Эксперт .NET
15827 / 10977 / 2850
Регистрация: 21.04.2018
Сообщений: 32,224
Записей в блоге: 2
07.11.2018, 17:19 3
Цитата Сообщение от Bars911 Посмотреть сообщение
На форме есть несколько ComboBox, и в один из них забиваю порядка 65000 элементов. Когда пытаюсь его открыть, программа висит около 2-2,5 минут. Предполагаю что проблемма в количестве элементов, вернее в том что их подтягивает с черз биндинг, если пытаюсь двинутся вниз по списку опять зависание((((
По моему у Вас дважды создаётся одна и таже коллекция
C#
1
2
3
4
5
            for (int i = 4; i<262148; i += 4)
            {
                string s = i.ToString();
                lABZResolution.Add(s);
            }
и потом её пересоздаёте в FillComboBoxWithItems.
Так же непонятно - зачем у Вас модель (метод FillComboBoxWithItems относится же к модели) создаёт визуальные элементы?
Что эти элементы делают в VM? Видимость UI элементов дальше View в принципе не должна быть.

Что касается самого отображения больших списков, то ни ComboBox, ни ListBox дефолтно на них не рассчитаны. Надо отслеживать перемещение по списку и динамически подгружать список. Где-то в инете были ссылки на эту тему.
0
Эксперт .NET
1846 / 1353 / 428
Регистрация: 10.06.2011
Сообщений: 2,128
07.11.2018, 17:24 4
Лучший ответ Сообщение было отмечено Bars911 как решение

Решение

Примените виртуализацию для ComboBox
Ещё статья на эту тему

Добавлено через 1 минуту
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Надо отслеживать перемещение по списку и динамически подгружать список. Где-то в инете были ссылки на эту тему
https://habr.com/post/208792/
1
4 / 2 / 2
Регистрация: 15.07.2011
Сообщений: 21
07.11.2018, 17:32  [ТС] 5
Спасибо, это как раз то что мне было нужно, добавил в ресурсы MainWindow.xaml:

XML
1
2
3
<ItemsPanelTemplate x:Key="VSP">
            <VirtualizingStackPanel/>
        </ItemsPanelTemplate>
и прописал в ComboBox:
XML
1
2
<ComboBox x:Name="ABZResolution" Grid.Column="1" Grid.Row="4" IsEnabled="{Binding Path=BDevelopmentMode, Mode=OneWay}" ItemsSource="{Binding ComboBoxVariables.Items}" AutomationProperties.ItemType="String"
                      ItemsPanel="{StaticResource VSP}"/>
Все заработало нормально)))
0
Модератор
Эксперт .NET
15827 / 10977 / 2850
Регистрация: 21.04.2018
Сообщений: 32,224
Записей в блоге: 2
07.11.2018, 17:36 6
Если коллекции передаваемые в FillComboBoxWithItems постоянны, то лучше сделайте так
C#
1
2
3
4
5
6
7
8
9
10
/// <summary>
        /// Fills WPF ComboBox with items
        /// </summary>
        /// <param name="comboBoxToFill">ComboBox to fill</param>
        /// <param name="Items">List of string with items</param>
        public static void FillComboBoxWithItems(out ComboBox comboBoxToFill, List<string> Items)
        {
            comboBoxToFill = new ComboBox();
            comboBoxToFill.ItemsSource = Items;
        }
Намного быстрее.
0
4 / 2 / 2
Регистрация: 15.07.2011
Сообщений: 21
07.11.2018, 17:44  [ТС] 7
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Так же непонятно - зачем у Вас модель (метод FillComboBoxWithItems относится же к модели) создаёт визуальные элементы?
Не совсем так, эта функция из сервисного класса, который вызывается из ViewModel, поскольку в зависимости от выбора пользователя в одном из ComboBox должны меняться Visisbility и Items других . Там же сидят несколько других, которые вроде ни к ViewModel ни к DataModel отнести нельзя. Или я чегот намудрил? Интересно услышать критику, поскольку новичек в WPF)))

Service.cs:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Win32;
 
namespace AKS16_AKS17_CalibrationGui_NewRev.ServiceClasses.UniversallyServiceClasses
{
    /// <summary>
    /// This class implements service functions for all projeckts levels
    /// </summary>
    public static class Services
    {
        /// <summary>
        /// Fills WPF ComboBox with items 
        /// </summary>
        /// <param name="comboBoxToFill">ComboBox to fill with items</param>
        /// <param name="Items">One or more string parameters for comboBox</param>
        public static void FillComboBoxWithItems(out ComboBox comboBoxToFill, params string[] Items)
        {
            comboBoxToFill = new ComboBox();
            for (int i = 0; i < Items.Length; i++)
            {
                comboBoxToFill.Items.Add(Items[i]);
            }
        }
        /// <summary>
        /// Fills WPF ComboBox with items
        /// </summary>
        /// <param name="comboBoxToFill">ComboBox to fill</param>
        /// <param name="Items">List of string with items</param>
        public static void FillComboBoxWithItems(out ComboBox comboBoxToFill, List<string> Items)
        {
            comboBoxToFill = new ComboBox();
            for (int i = 0; i<Items.Count; i++)
            {
                comboBoxToFill.Items.Add(Items[i]);
            }
        }
        /// <summary>
        /// Adds new items to WPF ComboBox
        /// </summary>
        /// <param name="comboBoxToAdd">ComboBox to expand with new items</param>
        /// <param name="Items">List of strings with items</param>
        public static void AddComboBoxItems(ref ComboBox comboBoxToAdd, List<string> Items)
        {
            for(int i = 0; i < Items.Count; i++)
            {
                comboBoxToAdd.Items.Add(Items[i]);
            }
        }
        /// <summary>
        /// Adds new items to WPF ComboBox
        /// </summary>
        /// <param name="comboBoxToAdd">ComboBox to expand with new items</param>
        /// <param name="Items">One or more strings with items</param>
        public static void AddComboBoxItems(ref ComboBox comboBoxToAdd, params string [] Items)
        {
            for(int i = 0; i < Items.Length; i++)
            {
                comboBoxToAdd.Items.Add(Items[i]);
            } 
        }
        /// <summary>
        /// Fills List<string> with values
        /// </summary>
        /// <param name="listToFill">List to fill</param>
        /// <param name="values">One or more string values</param>
        public static void FillListOfString(out List<string> listToFill, params string[] values)
        {
            listToFill = new List<string>();
            for(int i = 0; i<values.Length; i++)
            {
                listToFill.Add(values[i]);
            }
        }
        /// <summary>
        /// Closes the window with recived name
        /// </summary>
        /// <param name="Name"> Window name</param>
        /// <returns>true if was success or false if not</returns>
        public static bool CloseWindow(string sName)
        {
            try
            {
                WindowCollection collection = App.Current.Windows;
                foreach (Window current in collection)
                {
                    if (current.Name == sName)
                    {
                        current.Close();
                        return true;
                    }
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show("Error in Servise classe Services, function CloseWindow" + "\r\n" + ex.Message);
                return false;
            }
            return false;
        }
        
    }
}
0
Модератор
Эксперт .NET
15827 / 10977 / 2850
Регистрация: 21.04.2018
Сообщений: 32,224
Записей в блоге: 2
07.11.2018, 17:57 8
Цитата Сообщение от Bars911 Посмотреть сообщение
Интересно услышать критику, поскольку новичек в WPF)))
Я тоже новичок - стаж меньше 4 месяцев. Но один из "столпов" MVVM все UI элементы должны быть в пределах View.
Цитата Сообщение от Bars911 Посмотреть сообщение
Не совсем так, эта функция из сервисного класса, который вызывается из ViewModel, поскольку в зависимости от выбора пользователя в одном из ComboBox должны меняться Visisbility и Items других .
Для этого вполне достаточно биндинга из View на свойства VM. Не зачем в VM создавать сами элементы.

Добавлено через 5 минут
Вот посмотрите. У Вас в XAML идёт привязка Combox к источнику ItemsSource="{Binding ComboBoxSize.Items}". Можно же в VM создавать не Combox от которого нужно только Items, а создать в VM свойство-перечислитель или список (допустим с именем SizeItems) которое будет возвращать источник данных. И тогда привязку сделать на него ItemsSource="{Binding SizeItems}" Получится тот же самый результат, но без паразитного создания UI элемента.

Добавлено через 1 минуту
Если есть желание - можно пройтись по Вашему приложению и исправить откровенные "коряги".
2
07.11.2018, 17:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2018, 17:57
Помогаю со студенческими работами здесь

Ошибка при попытке открыть файл
файл не читает, выдает ошибку , ну типо &quot;ошибка открытия&quot; вот текст #include &quot;stdafx.h&quot;...

Вылет программы при попытке открыть файл
Добрый день. Столкнулся с такой ситуёвиной. При попытке открыть файл функцией CreateFile если в...

При попытке открыть папку выходит ошибка
Когда я хотел удалить папку Windows Live с ненужными мне программами, при удалении внезапно...

При попытке открыть файл он отправляется на печать
Не знаю, что делали на работе с этим ПК, но в контекстном меню всех файлов вместо Открыть появилась...

Ошибка при попытке открыть текстовый файл
При попытке открыть текстовый файл типа txt, выдает ошибку.

При попытке открыть фаил выскакивает ошибка
&quot;ThinApp has encounrered an unexpected error. Click Abort to close the application, retry to debug,...


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

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