Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Gekr
41 / 42 / 31
Регистрация: 01.10.2012
Сообщений: 185
Завершенные тесты: 1
1

Ищу пример wpf MVVM добавления записей в таблицу DataGrid

02.08.2015, 23:26. Просмотров 1750. Ответов 5
Метки нет (Все метки)

Дайте пожалуйста ссылку на пример где объясняется как добавлять записи через DataGrid, чтобы при добавлении новой записи коллекция связанная с DataGrid оповещалась об изменении.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2015, 23:26
Ответы с готовыми решениями:

WPF, MVVM, DataGrid
Доброго дня, форумчане. Описание проблемы: есть окно с DataGrid и несколькими кнопками для...

Получения данных из DataGrid WPF MVVM
Добрый день господа форумчане. Возник вопрос, как при использовании паттерна MVVM в WPF при...

WPF MVVM создать окно добавления элемента в список
Есть общий список элементов (в MainViewModel). На добавить в него элемент, юзая доп. окно для...

Редактирование XML-datagrid в WPF и паттерн MVVM
Добрый день, извините сразу, перелазил 720 страниц различной инфы не нашел, суть вопроса как...

WPF MVVM DataGrid added new item event
Привет всем. Кто подскажет как отследить событие добавления нового элемента в таблицу DataGrid?

5
Casper-SC
Эксперт .NET
3980 / 1869 / 367
Регистрация: 27.03.2010
Сообщений: 5,219
Записей в блоге: 1
02.08.2015, 23:56 2
Gekr, MVVM Light и оповещения об изменениях модели

Добавлено через 57 секунд
Цитата Сообщение от Gekr Посмотреть сообщение
где объясняется как добавлять записи через DataGrid
Разве что по ссылке это не объясняется, а просто есть проект.
0
Gekr
41 / 42 / 31
Регистрация: 01.10.2012
Сообщений: 185
Завершенные тесты: 1
03.08.2015, 08:30  [ТС] 3
Не совсе то что я искал. Мне нужно чтобы при вводе данных в таблицу DataGrid коллекция с которой она связана оповещалась об изменениях, но у меня почему-то не получается это сделать. Я только начал изучать 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
    public class ItemViewModel : ViewModelBase
    {
        private string supplier;
        private string supplierBank;
        private int supplierAccount;
 
        private string buyer;
        private string buyerBank;
        private int buyerAccount;
        private string shipping_adress;
 
        private string item_name;
        private string mesure;
        private float quantity;
        private float price_exc_VAC;
        private float VAC;
        private float price_inc_Vac;
        private float total;
 
 
        public ItemViewModel(string tabName)
        {
            TabName = tabName;
        }
 
        public string TabName
        {
            get;
            private set;
        }
 
        public string Supplier
        {
            get
            {
                return supplier;
            }
 
            set
            {
                if (supplier != value)
                {
                    supplier = value;
                    OnPropertyChanged("Supplier");
                }
            }
        }
 
        public string SupplierBank
        {
            get
            {
                return supplierBank;
            }
 
            set
            {
                if (supplierBank != value)
                {
                    supplierBank = value;
                    OnPropertyChanged("SupplierBank");
                }
            }
        }
 
        public int SupplierAccount
        {
            get
            {
                return supplierAccount;
            }
 
            set
            {
                if (supplierAccount != value)
                {
                    supplierAccount = value;
                    OnPropertyChanged("SupplierAccount");
                }
            }
        }
 
        public string Buyer
        {
            get
            {
                return buyer;
            }
 
            set
            {
                if (buyer != value)
                {
                    buyer = value;
                    OnPropertyChanged("Buyer");
                }
            }
        }
 
        public string BuyerBank
        {
            get
            {
                return buyerBank;
            }
 
            set
            {
                if (buyerBank != value)
                {
                    buyerBank = value;
                    OnPropertyChanged("BuyerBank");
                }
            }
        }
 
        public int BuyerAccount
        {
            get
            {
                return buyerAccount;
            }
 
            set
            {
                if (buyerAccount != value)
                {
                    buyerAccount = value;
                    OnPropertyChanged("BuyerAccount");
                }
            }
        }
 
        public string Item_Name
        {
            get
            {
                return item_name;
            }
 
            set
            {
                if (item_name != value)
                {
                    item_name = value;
                    OnPropertyChanged("Item_Name");
                }
            }
        }
 
        public string Mesure
        {
            get
            {
                return mesure;
            }
 
            set
            {
                if (mesure != value)
                {
                    mesure = value;
                    OnPropertyChanged("Mesure");
                }
            }
        }
 
        public float Quantity
        {
            get
            {
                return quantity;
            }
 
            set
            {
                if (quantity != value)
                {
                    quantity = value;
                    OnPropertyChanged("Quantitty");
                }
            }
        }
 
        public float Price_exc_VAT
        {
            get
            {
                return price_exc_VAC;
            }
 
            set
            {
                if (price_exc_VAC != value)
                {
                    price_exc_VAC = value;
                    OnPropertyChanged("Price_exc_VAT");
                }
            }
        }
 
        public float VAT
        {
            get
            {
                return VAC;
            }
 
            set
            {
                if (VAC != value)
                {
                    VAC = value;
                    OnPropertyChanged("VAT");
                }
            }
        }
 
        public float Price_inc_VAT
        {
            get
            {
                return price_inc_Vac;
            }
 
            set
            {
                if (price_inc_Vac != value)
                {
                    price_inc_Vac = value;
                    OnPropertyChanged("Price_inc_VaT");
                }
            }
        }
 
        public float Total
        {
            get
            {
                return total;
            }
 
            set
            {
                if (total != value)
                {
                    total = value;
                    OnPropertyChanged("Total");
                }
            }
        }
}
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
public class MainViewModel : ViewModelBase
    {
        private ObservableCollection<ItemViewModel> items = new ObservableCollection<ItemViewModel>();
        private ObservableCollection<InvoiceItem> invoice_items = new ObservableCollection<InvoiceItem>();
 
        public ObservableCollection<InvoiceItem> Invoice_Items
        {
            get
            {
                return invoice_items;
            }
            set
            {
                invoice_items = value;
                OnPropertyChanged("Invoice_Items");
            }
        }
 
        public ObservableCollection<ItemViewModel> Items
        {
            get
            {
                return items;
            }
            set
            {
                items = value;
                OnPropertyChanged("Items");
            }
        }
 
        private int _selectedTabIndex;
 
    public int SelectedTabIndex
    {
        get { return _selectedTabIndex; }
        set { _selectedTabIndex = value; }
    }
 
    public MainViewModel()
    {
        SelectedTabIndex = 0;
    }
 
 
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    public class ViewModelBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
 
        protected void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
 
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 public partial class TabItemView : UserControl
    {
        public TabItemView()
        {
            InitializeComponent();
 
        }
 
        private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
 
        }
 
 
    }
И разметка для DataGrid
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<DataGrid AutoGenerateColumns="False" Grid.ColumnSpan="5" Grid.Row="3" 
                  Height="104" HorizontalAlignment="Stretch" Margin="55,115,55,0" Name="dataGrid1" 
                  VerticalAlignment="Top" Width="Auto" CanUserResizeRows="True" ItemsSource="{Binding Invoice_Items}" DataContext="{Binding Invoice_Items}"
                  IsReadOnly="False" SelectionUnit="Cell" CanUserAddRows="True">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Item Name" Binding="{Binding Item_Name}"/>
                <DataGridTextColumn Header="Mesure" Binding="{Binding Mesure}"/>
                <DataGridTextColumn Header="Quantity" Binding="{Binding Quantity}"/>
                <DataGridTextColumn Header="Price exc VAT" Binding="{Binding Price_exc_VAT}"/>
                <DataGridTextColumn Header="VAT" Binding="{Binding VAT}"/>
                <DataGridTextColumn Header="Price Inc VAT" Binding="{Binding Price_inc_VAT}"/>
                <DataGridTextColumn Header="Total" Binding="{Binding Total}"/>
            </DataGrid.Columns>
        </DataGrid>
Колонки в DataGrid даже не подгружаються, вижу пустой DataGrid. Если в классе TabItemView установить для DataGrid DataContext на коллекцию то тогда таблица подгружается. Но при добавлении/изменении записей через DataGrid коллекция не оповещается. Не могу понять почему?
И еще вопрос не будет ли противоречить паттерну MVVM добавление двух классов в которые я перенесу все поля ItemViewModel, а в ItemViewModel буду использовать объекты этих классов.

То есть если я сделаю класс InvoiceItem с полями
C#
1
2
3
4
5
6
7
 private string item_name;
        private string mesure;
        private float quantity;
        private float price_exc_VAC;
        private float VAC;
        private float price_inc_Vac;
        private float total;
И класс Invoice
C#
1
2
3
4
5
6
7
8
9
10
        private string supplier;
        private string supplierBank;
        private int supplierAccount;
 
        private string buyer;
        private string buyerBank;
        private int buyerAccount;
        private string shipping_adress;
 
        InvoiceItem [] II = new InvoiceItem [100];
И как при этом сохранить оповещания об изменении в коллекции, если так вообще можно делать?
Или для данной задачи использую вообще не тот паттерн?
0
hamin
384 / 316 / 208
Регистрация: 21.11.2012
Сообщений: 984
03.08.2015, 12:08 4
чтобы коллекция оповещалась обо всех изменениях, нужно в биндинге колонки указать:

XML
1
<DataGridTextColumn Header="Quantity" Binding="{Binding Quantity, Mode=TwoWay}"/>
и да. чтобы ваш контрол видел ViewModel, нужно в его конструкторе переменной DataContext присвоить объект модели:

C#
1
2
3
4
5
6
 public TabItemView()
        {
            InitializeComponent();
            MainViewModel myModel= new MainViewModel();
            this.DataContext = myModel;
        }
0
Casper-SC
Эксперт .NET
3980 / 1869 / 367
Регистрация: 27.03.2010
Сообщений: 5,219
Записей в блоге: 1
03.08.2015, 18:25 5
И этот момент не правильно прописан:
XML
1
ItemsSource="{Binding Invoice_Items}" DataContext="{Binding Invoice_Items}"
Добавлено через 3 минуты
Цитата Сообщение от Gekr Посмотреть сообщение
И еще вопрос не будет ли противоречить паттерну MVVM добавление двух классов в которые я перенесу все поля ItemViewModel, а в ItemViewModel буду использовать объекты этих классов.
Ничего не будет противоречить, если я тебя правильно понял.

Цитата Сообщение от Gekr Посмотреть сообщение
Или для данной задачи использую вообще не тот паттерн?
Обычное приложение, ничего особого не увидел, всё тот. Да и причём тут MVVM, если у тебя просто неправильно биндинги прописаны.

Добавлено через 3 минуты
MVVM
View (окна, юзер контролы и прочее) знает о ViewModel (логика программы, какие-то сигналы для View, обёртки над моделью), а ViewModel знает о Model (голые данные, какая-то логика, которую может использовать внутри себя ViewModel, ViewModel получая результат вычисления из Model посылает сигналы для View, а View через биндинги реагирует на эти сигналы.

Допускается внутри Code Behind представления (View) работать с вью моделями, но не передавать внутрь вью модели какие бы то ни было ссылки на себя, так как ViewModel вообще понятия не имеет о существовании View.

Добавлено через 23 секунды
Ещё раз кто о ком знает:
View -> ViewModel -> Model

Добавлено через 1 минуту
Что значит знает: Это значит, что Model не может принимать в своих методах в качестве параметров ссылки на ViewModel или View. Или ViewModel не может быть полем в классе Model. Model вообще ничего не знает о ViewModel или View. То же самое для ViewModel и View. ViewModel не может внутри себя иметь ссылки на View.

Цитата Сообщение от Gekr Посмотреть сообщение
И разметка для DataGrid
Я бы тебе подсказал, если бы видел всю разметку и где задаётся DataContext окна.

Добавлено через 34 секунды
А лучше скинь проект, код парсить со страницы долго и неинтересно.
0
Gekr
41 / 42 / 31
Регистрация: 01.10.2012
Сообщений: 185
Завершенные тесты: 1
03.08.2015, 22:07  [ТС] 6
Спасибо за ответы. Что то я вообще запутался...
Вопрос относительно присвоения DataContext объекта модели:
Когда я присваиваю DataContext объект модели в TabItemView

C#
1
2
3
4
5
6
 public TabItemView()
        {
            InitializeComponent();
            MainViewModel myModel= new MainViewModel();
            this.DataContext = myModel;
        }
В MainWindow слетает DataContext (не знаю как по другому это назвать). ObservableCollection перестает реагировать на изменения TextBox'ов и при добавлении новых вкладок, данные в текстбоксах с первой вкладки просто переносятся на все последующие.
Тоже самое с DataGrid, но даже если я убираю DataContext с MainWindow данные в DataGrid все равно переносятся из первой вкладки во все последующие, хоть при этом ObservableCollection оповещается об изменениях.

Button_Click метод добавления вкладки в MainWindow
C#
1
2
3
4
5
6
7
8
private void AddInvoice_Click(object sender, RoutedEventArgs e)
        {
            count++;
            
            string s = string.Format("Tab {0}", count);
            mainViewModel.Items.Add(new ItemViewModel(s));
            this.DataContext = mainViewModel;
        }
Разметка для TabControl в MainWindow
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
Grid>
                <TabControl
            ItemsSource="{Binding Items}" SelectedIndex="{Binding SelectedTabIndex, Mode=TwoWay}">
                    <TabControl.ItemTemplate>
                        <DataTemplate>
                            <DockPanel>
                                <TextBlock Text="{Binding TabName}"><TextBlock.Background><SolidColorBrush /></TextBlock.Background></TextBlock>
                                <Button Name="btnDelete" DockPanel.Dock="Right" Margin="5,0,0,0" Padding="0"  CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}, Path=Name}" BorderBrush="#00000000">
                                    <Image Source="/WPF_AccApp;component/Images/11.gif" Height="11" Width="11"></Image>
                                </Button>
                                <DockPanel.Background>
                                    <SolidColorBrush />
                                </DockPanel.Background>
                            </DockPanel>
                        </DataTemplate>
                    </TabControl.ItemTemplate>
                    <TabControl.ContentTemplate>
                        <DataTemplate>
                            <views:TabItemView />
                        </DataTemplate>
                    </TabControl.ContentTemplate>
                    <TabControl.ItemContainerStyle>
                        <Style TargetType="{x:Type TabItem}">
                            <Setter Property="IsSelected" Value="{Binding IsSelected}" />
                        </Style>
                    </TabControl.ItemContainerStyle>
                </TabControl>
            </Grid>
Разметка TabItemView

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
<UserControl x:Class="WPF_AccApp.Views.TabItemView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="640" d:DesignWidth="800" Focusable="True" IsHitTestVisible="True">
        <Grid Name="grid1" HorizontalAlignment="Stretch" VerticalAlignment="Top" MinWidth="768" MinHeight="446" Focusable="True">
            <Grid.RowDefinitions>
                <RowDefinition MinHeight="43" Height="*" />
                <RowDefinition Height="*" MinHeight="45" />
                <RowDefinition Height="*" MinHeight="45" />
                <RowDefinition Height="*" MinHeight="350" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" MinWidth="100" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <TextBox Text="{Binding Supplier}" Grid.Column="1" Height="27" Name="textBox1" VerticalAlignment="Top" Margin="11,6,0,0" HorizontalAlignment="Stretch" Width="Auto" FontSize="14" HorizontalContentAlignment="Stretch" MinWidth="141" FlowDirection="LeftToRight" DataContext="{Binding}" />
            <Label Content="Supplier" Height="27" Name="label2" VerticalAlignment="Top" FontSize="14" FontFamily="Tahoma" FontWeight="Bold" Margin="21,6,0,0" Width="Auto" IsEnabled="True" HorizontalAlignment="Stretch" Foreground="Black" Background="White" MinWidth="133" HorizontalContentAlignment="Stretch" />
            <TextBox Text="{Binding SupplierBank}" Grid.Column="1" Grid.Row="1" FontSize="14" Height="27" HorizontalAlignment="Stretch" Margin="11,6,0,0" Name="textBox11" VerticalAlignment="Top" Width="Auto" MinWidth="141" />
            <Label Grid.Row="1" Content="Supplier Bank" FontFamily="Tahoma" FontSize="14" FontWeight="Bold" Height="27" Margin="21,6,0,0" Name="label3" VerticalAlignment="Top" Width="Auto" Background="White" MinWidth="133" />
            <TextBox Text="{Binding SupplierAccount}" Grid.Column="1" Grid.Row="2" FontSize="14" Height="27" HorizontalAlignment="Stretch" Margin="11,6,0,0" Name="textBox12" VerticalAlignment="Top" Width="Auto" MinWidth="141" />
            <Label Grid.Row="2" Content="Account Number" FontFamily="Tahoma" FontSize="14" FontWeight="Bold" Height="27" Margin="21,6,0,0" Name="label4" VerticalAlignment="Top" Background="White" MinWidth="133" />
            <TextBox Text="{Binding Buyer}" Grid.Column="4" FontSize="14" Height="27" Margin="11,6,20,0" Name="textBox2" VerticalAlignment="Top" HorizontalAlignment="Stretch" Width="Auto" MinWidth="141" />
            <Label Grid.Column="3" Content="Buyer" FontFamily="Tahoma" FontSize="14" FontWeight="Bold" Height="27" Margin="21,6,0,0" Name="label5" VerticalAlignment="Top" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Background="White" MinWidth="133" />
            <TextBox Text="{Binding BuyerBank}" Grid.Column="4" Grid.Row="1" FontSize="14" Height="27" HorizontalAlignment="Stretch" Margin="11,6,20,0" Name="textBox3" VerticalAlignment="Top" Width="Auto" MinWidth="141" />
            <Label Grid.Column="3" Grid.Row="1" Content="Buyer Bank" FontFamily="Tahoma" FontSize="14" FontWeight="Bold" Height="27" Margin="21,6,0,0" Name="label6" VerticalAlignment="Top" Width="Auto" HorizontalAlignment="Stretch" Background="White" MinWidth="133" />
            <TextBox Text="{Binding BuyerAccount}" Grid.Column="4" Grid.Row="2" FontSize="14" Height="27" HorizontalAlignment="Stretch" Margin="11,6,20,0" Name="textBox4" VerticalAlignment="Top" Width="Auto" MinWidth="141" />
            <Label Grid.Column="3" Grid.Row="2" Content="Account Number" FontFamily="Tahoma" FontSize="14" FontWeight="Bold" Height="27" Margin="21,6,0,0" Name="label7" VerticalAlignment="Top" Width="Auto" HorizontalAlignment="Stretch" Background="White" MinWidth="133" />
        <DataGrid AutoGenerateColumns="False" Grid.ColumnSpan="5" Grid.Row="3" 
                  Height="104" HorizontalAlignment="Stretch" Margin="55,115,55,0" Name="dataGrid1" 
                  VerticalAlignment="Top" Width="Auto" CanUserResizeRows="True" ItemsSource="{Binding Invoice_Items}"
                  IsReadOnly="False" SelectionUnit="Cell" CanUserAddRows="True">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Item Name" Binding="{Binding Item_Name, Mode=TwoWay}"/>
                <DataGridTextColumn Header="Mesure" Binding="{Binding Mesure, Mode=TwoWay}"/>
                <DataGridTextColumn Header="Quantity" Binding="{Binding Quantity, Mode=TwoWay}"/>
                <DataGridTextColumn Header="Price exc VAT" Binding="{Binding Price_exc_VAT, Mode=TwoWay}"/>
                <DataGridTextColumn Header="VAT" Binding="{Binding VAT, Mode=TwoWay}"/>
                <DataGridTextColumn Header="Price Inc VAT" Binding="{Binding Price_inc_VAT, Mode=TwoWay}"/>
                <DataGridTextColumn Header="Total" Binding="{Binding Total, Mode=TwoWay}"/>
            </DataGrid.Columns>
        </DataGrid>
        <TextBox Grid.ColumnSpan="3" Grid.Row="3" Height="27" HorizontalAlignment="Stretch" Name="textBox5" VerticalAlignment="Top" Grid.Column="1" Margin="11,0,0,0" />
        <Label Background="White" Content="Shipping Address" FontFamily="Tahoma" FontSize="14" FontWeight="Bold" Height="27" Margin="21,0,0,0" MinWidth="133" Name="label1" VerticalAlignment="Top" Grid.Row="3" />
        <Label Background="White" Content="Invoice #" FontFamily="Tahoma" FontSize="14" FontWeight="Bold" Height="27" Margin="78,65,0,0" MinWidth="133" Name="label8" VerticalAlignment="Top" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" />
    </Grid>
</UserControl>
0
03.08.2015, 22:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2015, 22:07

Пример реализации WPF+MVVM приложения
Тема из цикла http://www.cyberforum.ru/wpf-silverlight/thread2384523.html Пример решения ТЗ по...

Пример переключения между окнами WPF MVVM
Здравствуйте. Изучаю как можно переходить между окнами в wpf в рамках MVVM. Изучаю данный пример:...

Как разбить WPF, MVVM по проектах? Пример команды
добрый день, я делаю большой проект на WPF с использованием паттерна MVVM. как мне его правильно...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru