Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/34: Рейтинг темы: голосов - 34, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 30.08.2019
Сообщений: 58

WPF & MVVM: Как получить значения из элементов VIEW (тексбоксы/комбобоксы/листбоксы.) и отправить их во Вью-Модель

28.10.2019, 15:41. Показов 7831. Ответов 33

Студворк — интернет-сервис помощи студентам
Всем привет. Собственно в названии темы удалось изложить суть проблемы.
Читал англоязычные форумы - вменяемого ответа не нашел.
Это можно делать в *.cs файле, одноименным с названием View без проблем, делал уже.
Обращаемся к элементу по имени, и меняем его свойства (цвет, видим/невидим и т.д.).

Но как обратиться к элементам из Вью-Модели? При вводе имени ничего не происходит...Для чего это нужно?
Ну вот например...
Заполняю паспорт на партию семян, и там из комбобокса выпадает список организаций (которые хранятся в БД).
ОК. Но как вот теперь обратиться к конкретной выбранной организации, чтобы добавить ссылку на неё в паспорте и сохранить паспорт в БД?
Прилагаю скриншот.
Помогите.
Миниатюры
WPF & MVVM: Как получить значения из элементов VIEW (тексбоксы/комбобоксы/листбоксы.) и отправить их во Вью-Модель  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.10.2019, 15:41
Ответы с готовыми решениями:

WPF - MVVM - синхронизируемые комбобоксы
Доброго. Есть следующая задача - два комбобокса, значения - , также есть значение "Любой". Суть в том, что если в первом...

WPF MVVM. How to create display new view?
Недавно начал работать с МВВМ, и такой вопрос, как отобразить новую вюшку, например при клике по кнопке? Само собой, с помощю МВВМ и без...

WPF MVVM View и ViewModel или UserControl и DependencyProperty
Не так давно ударился в WPF и шаблон MVVM. Вот такой вопрос возник... У меня есть View которая "собирается" из более мелких View....

33
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
28.10.2019, 15:53
trimagick77, из ViewModel в принципе нельзя обращаться к View, в том числе ни к каким UI элементам.
ViewModel ничего не знает о View. Даже о типе View знаний нет. WPF это или WinForms, или Консоль, или печатная машинка - ViewModel должно быть всё равно.

WPF View сама обращается к View по необходимости.
В основном через привязки (Binding).
0
0 / 0 / 0
Регистрация: 30.08.2019
Сообщений: 58
28.10.2019, 16:00  [ТС]
Элд Хасп, спасибо за ответ. Я в принципе так и думал...
Ну хорошо, как тогда реализовать мой пример выше?
Мы же получается организацию выбираем только во время выполнения программы - как получить её значение?
Не пойму
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
28.10.2019, 16:08
trimagick77, подходов несколько.

Можно в ViewModel создать свойство к которому в View будет привязан элемент.
При исполнении команды значение будет получаться из им этого свойства.

Другой способ. Так как сохранять надо не одно, а несколько значений, то их все можно привязать через мультиконвертер к проекту команды. И метод исполняющий команду получить все значения из переданного параметра.
Посмотрите пример применения "SimpleMultiConverter" в теме "WPF конвертеры" из Готовые решения, примеры и рекомендации начинающим на WPF [Элд Хасп]
0
0 / 0 / 0
Регистрация: 30.08.2019
Сообщений: 58
28.10.2019, 17:11  [ТС]
Элд Хасп, понимаю, что прошу много но может, как будет время глянете мой код.
Самому испрвить не удалось

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Можно в ViewModel создать свойство к которому в View будет привязан элемент
И подскажите, как переделать по первому способу.

Прикрепляю архив

Код Базовой вью-модели - ViewModelBase.rar
Код наследуемой Вью-Модели - VMPassportRawSeed.rar
Код View - PassportsRawSeed.rar
Вложения
Тип файла: rar ViewModelBase.rar (2.0 Кб, 7 просмотров)
Тип файла: rar PassportsRawSeed.rar (4.4 Кб, 5 просмотров)
Тип файла: rar VMPassportRawSeed.rar (3.9 Кб, 1 просмотров)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
28.10.2019, 18:09
trimagick77, к сожалению посмотреть ваш архив сейчас не могу.
Я в длительной поездке и без компа.
На форум вхожу со смарта.

Поэтому код выложите здесь.
Для начала код Model.
0
0 / 0 / 0
Регистрация: 30.08.2019
Сообщений: 58
29.10.2019, 11:16  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Поэтому код выложите здесь
Прикрепляю проект Net Core WPF App, в качестве СУБД выбрана MSSQL (переделал для Вас )
Как создать актуальную БД:
Консоль диспетчера пакетов->Add-Migration MigrName1, потом update-database
Список организаций, уже Будет в ДБ (делал через HasData).

Далее запускаем проект, Паспорта на сырье и семена -> Добавить паспорт, чтобы перейти к проблемной теме.

Также буду рад любым другим комментариям по поводу проекта


Цитата Сообщение от Элд Хасп Посмотреть сообщение
Для начала код Model
как его отдельно выложить...не понял...там же много классов...поэтоу выложил весь проект
Вложения
Тип файла: rar Semenovodstvo.rar (6.94 Мб, 6 просмотров)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
29.10.2019, 11:28
Цитата Сообщение от trimagick77
...там же много классов...
Тогда, конечно, код выкладывать числа нет.
Но и я в таком случае помочь не смогу.
Может кто другой возьмётся.

P.S. Чем вызван выбор Core, а не FrameWork?
0
0 / 0 / 0
Регистрация: 30.08.2019
Сообщений: 58
29.10.2019, 11:36  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Чем вызван выбор Core, а не FrameWork
Уже обсуждал с вами раньше, но теперь рискну продолжить.
Entity Framework Core по другому называется Entity Framework 7...т.е. просто Entity Framework, если смотреть (не Core)
называется Entity Framework 6...т.е. эта же как бы следующая версия, более усовершенствованная, и фишек блольше...
в частности HasData, как я уже писал выше, более продвинутые Маппинги и т.д.
т.е. смысл EF7 не только мультиплатформенность...

Entity Framework Core is the new version of Entity Framework after EF 6.x
цитата вот отсюда
https://www.entityframeworktut... -core.aspx
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
29.10.2019, 11:42
trimagick77, по-моему вспомнил.
Выбор Core было продиктован выбором БД.

Но по любому, ближайшие месяцы с обширными кодом помочь не смогу.
0
0 / 0 / 0
Регистрация: 30.08.2019
Сообщений: 58
29.10.2019, 11:47  [ТС]
OK. кто из ПРО, помогите плизз, проект полностью рабочий и БД создать пару сек...
0
0 / 0 / 0
Регистрация: 30.08.2019
Сообщений: 58
01.11.2019, 14:14  [ТС]
Цитата Сообщение от trimagick77 Посмотреть сообщение
Semenovodstvo.rar (6.94 Мб, 0 просмотров)
Мда Ноль просмотров... Кто из ПРО, Нид Хелп;
если нет время посмотреть код - подскажите хотя бы где,что почитать более подробно...

кстати модель планирую в web api переделать, но в контексте данной темы это по-мойму ничего не изменит...
не пойму как выбранный элемент комбобокса сохранить...

Добавлено через 5 часов 2 минуты
Цитата Сообщение от trimagick77 Посмотреть сообщение
модель планирую в web api переделать
Начал делать...
ReadAsAsync - без проблем работает в консольном приложении, но здесь вылетает...
подозрение, что установлен не правильный Nuget пакет
в данный момент установлен Microsoft.AspNet.WebApi.Client - но с ним зависает....
при этом ReadAsAsync, повторюсь без проблем работает в консольном приложении...
если я правильно мыслю, подскажите необходимый Nuget пакет или как исправить, чтобы и здесь заработало
0
0 / 0 / 0
Регистрация: 30.08.2019
Сообщений: 58
04.11.2019, 10:26  [ТС]
Цитата Сообщение от trimagick77 Посмотреть сообщение
модель планирую в web api переделать
переделал...
теперь пишу так в *.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
using Semenovodstvo.ViewModel;
using Semenovodstvo.ViewModel.Helpers;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
 
namespace Semenovodstvo.View
{
    /// <summary>
    /// Логика взаимодействия для VMPassportRawSeed.xaml
    /// </summary>
    public partial class PassportRawCone : Window
    {
        readonly WebAPI _webAPI;
        private async void GetOrgs()
        {
            var listOrg = await _webAPI.GetResponseAsync<List<Organization>>("/directories/organizations");
            var listOrgNames = listOrg.Select(x => x.Name).ToList();
            CBorg.ItemsSource = listOrgNames;
        }
        public PassportRawCone()
        {
            DataContext = new VMPassportRawSeed();
            InitializeComponent();
            _webAPI = new WebAPI();
            GetOrgs();
        }
    }
}
класс WebAPI реализован в отдельном классе - там ничего интересного...только коннект к localhost

но понимание не пришло... всё работает - список организаций выводится,
но вот как сохранить определенную выбранную в паспорт??? не понятно...
здесь всё ровно приходиться обращаться к имени комбобокса "CBorg"
и вот как во вью-модель передать выбранную организацию в комбобоксе?

Добавлено через 17 минут
Цитата Сообщение от Элд Хасп Посмотреть сообщение
из ViewModel в принципе нельзя обращаться к View, в том числе ни к каким UI элементам
забыл, извиняюсь за глупость...
0
WPF Разработчик
 Аватар для sttrox
463 / 167 / 42
Регистрация: 20.02.2018
Сообщений: 285
10.11.2019, 17:08
trimagick77, поскольку Вы хотите использовать MVVM, вам необходимо создать Model в которой поместите поле WebApi и метод который вернёт список организаций.

Затем Вам необходимо передать эту модель в VM(cкорее всего в VMPassportRawSeed). Добавить свойство и команду
C#
1
2
List<String> Orgs  => _modelOrganizations.GetOrgs();
ICommand CommandGetOrgs => _commandGetOrgs??(_commandGetOrgs = new RelayCommand(o=> OnPropertyChanged(nameOf(Orgs))))
После чего эту VM можно передать в Ваше окно.

C#
1
2
3
var window = new PassportRawCone();
window.DataContext = new VMPassportRawSeed(new ModelOrganizations());
window.ShowDialog();
соответственно удалите весь код из Code-Behind(из xxx.xaml.cs)
0
Ищущий знания
 Аватар для Felix Felicis
11 / 8 / 4
Регистрация: 31.05.2015
Сообщений: 209
10.11.2019, 18:49
trimagick77,
Кликните здесь для просмотра всего текста

PM> Add-Migration MigrName1
Build failed.

Не загружается
0
0 / 0 / 0
Регистрация: 30.08.2019
Сообщений: 58
10.11.2019, 20:03  [ТС]
Цитата Сообщение от Felix Felicis Посмотреть сообщение
PM> Add-Migration MigrName1
Build failed
сейчас всё перекачал-перепроверил. у меня все ОК.
внимательно проверьте все ли там пакеты установлены и всё-такое...Net Core 3.0...

в любом случае спасибо за готовность помочь
по теме вроде бы разобрался... скачал с github пример готовый, где подобное реализуется...
0
8 / 6 / 4
Регистрация: 02.07.2019
Сообщений: 77
10.11.2019, 20:36
Так же бьюсь с этим вопросом.
Это Вью. В нем есть сомбоБокс, загружающий информацию об организациях из OservableCollection,
по выбору организации я хочу загрузить департаменты, содержащиеся в этой организации в листБокс под ним.
Как получить во вьюМодел выбранную организацию? Читал Метанит, статью о 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
<Window x:Class="InfoSystem.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:InfoSystem"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="3*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition />
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <Menu Grid.Row="0" Grid.ColumnSpan="2">
            <MenuItem Header="Файл" Margin="1,2"></MenuItem>
            <MenuItem Header="Правка" Margin="1,2"></MenuItem>
        </Menu>
        <StackPanel Grid.Row="1" Grid.ColumnSpan="2" Orientation="Horizontal" HorizontalAlignment="Center">
        </StackPanel>
        
        <StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" HorizontalAlignment="Center">
        </StackPanel>
        
        <StackPanel Grid.Row="2" Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Center">
        </StackPanel>
        <DockPanel Grid.Row="3" Grid.Column="0">
            <TextBlock DockPanel.Dock="Top" HorizontalAlignment="Center" Text="Организация" />
            <ComboBox DockPanel.Dock="Top" ItemsSource="{Binding Companies}" x:Name="ComboBoxCompanies" SelectedItem="{Binding SelectedCompany}">
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=Name}"/>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>
            <TextBlock DockPanel.Dock="Top" HorizontalAlignment="Center" Text="Департаменты" />
 
            <ListBox DockPanel.Dock="Top" ItemsSource="{Binding DepartamentsOfCompany}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=Name}"/>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>    
        </DockPanel>
 
 
        
        <DataGrid Grid.Row="3" Grid.Column="1">
        </DataGrid>
    </Grid>
</Window>
Это ВьюМодел
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
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Collections.ObjectModel;
using InfoSystem.Model;
using InfoSystem.Commands;
using System.Xml.Linq;
 
namespace InfoSystem.ViewModel
{
    class MainViewModel : INotifyPropertyChanged
    {
        ObservableCollection<Company> companies;
        ObservableCollection<Departament> departaments;
        ObservableCollection<Worker> workers;
        ObservableCollection<Departament> departamentsOfCompany;
 
        Company selectedCompany;
 
        public MainViewModel()
        {
 
            Companies = new ObservableCollection<Company>
            {
            new Company {
                Name = "Газпром ",
                Birthday = new DateTime(1993, 02, 17),
                Adress = "ул. Наметкина, 16, Москва, ГСП-7, 117997" },
            new Company {
                Name = "Рога и Копыта ",
                Birthday = new DateTime(1990, 01, 02),
                Adress = "Кремль. Москва." }
            };
            Departaments = new ObservableCollection<Departament>
            {   //Заполнил временно департаменты вручную
                new Departament { Name = "Департамент 104 Газпром", Company = companies[0], Description = "Юридический департамент" },
                new Departament { Name = "Департамент 105 Газпром", Company = companies[0], Description = "Департамент по управлению имуществом и корпоративным отношениям" },
                new Departament { Name = "Департамент 106 Газпром", Company = companies[0], Description = "Департамент информационной политики" },
                new Departament { Name = "Департамент 621 Газпром", Company = companies[0], Description = "Департамент по управлению корпоративными затратами" },
                new Departament { Name = "Департамент 623 Газпром", Company = companies[0], Description = "Департамент перспективного развития" },
                new Departament { Name = "Департамент 201 Газпром", Company = companies[0], Description = "Департамент документооборота и контроля Аппарата Правления" }
            };
            Workers = new ObservableCollection<Worker>();
            for (int i = 0; i < 123; i++)
            {
                Workers.Add(GenerateRandomWorker(companies, departaments, i));
            }
 
        }
        #region Публичные свойства
        /// <summary>
        /// Компании
        /// </summary>
        public ObservableCollection<Company> Companies
        {
            get { return companies; }
            set
            {
                companies = value;
                OnPropertyChanged("Companies");
            }
 
        }
 
        /// <summary>
        /// Департаменты
        /// </summary>
        public ObservableCollection<Departament> Departaments
        {
            get { return departaments; }
            set
            {
                departaments = value;
                OnPropertyChanged("Departaments");
            }
 
        }
 
        /// <summary>
        /// Работники организации
        /// </summary>
        public ObservableCollection<Worker> Workers
        {
            get { return workers; }
            set
            {
                workers = value;
                OnPropertyChanged("Workers");
            }
 
        }
 
        /// <summary>
        /// Коллекция департаментов по выбранной Компании
        /// </summary>
        public ObservableCollection<Departament> DepartamentsOfCompany
        {
            get
            {
                return departamentsOfCompany;
            }
            set
            {
                //for (int i = 0; i < departaments.Count; i++)
                //{
                //    if (departaments[i].Company == companies[0]) departamentsOfCompany.Add(departaments[i]);
                //}
                departamentsOfCompany = (ObservableCollection<Departament>)departaments.Where(d => d.Company.Name == companies[0].Name);
            }
        }
 
        public ObservableCollection<Worker> WorkersOfDepartament { get; set; }
 
        /// <summary>
        /// Выделенная организация
        /// </summary>
        public Company SelectedCompany
        {
            get { return selectedCompany; }
            set
            {
                selectedCompany = companies[0];
                OnPropertyChanged("SelectedCompany");
            }
        }
 
 
        #endregion
 
        #region Вспомогательные методы
        /// <summary>
        /// Генератор работников
        /// </summary>
        /// <returns></returns>
        static Worker GenerateRandomWorker(ObservableCollection<Company> companies, ObservableCollection<Departament> departaments, int number)
        {
            Random rnd = new Random(Guid.NewGuid().GetHashCode());
            Worker worker = new Worker();
            worker.Departament = departaments[rnd.Next(0, departaments.Count)];
            worker.Company = companies[rnd.Next(0, companies.Count)];
            worker.Name = "Имя_" + number;
            worker.Surname = "Фамилия_" + number;
            worker.Birthday = GetRandomDay((DateTime.Now).AddYears(-69), (DateTime.Now).AddYears(-19));
            worker.ProjectsAmount = rnd.Next(10);
            worker.Salary = rnd.Next(50000, (50000 + worker.ProjectsAmount * 30000));
            return worker;
        }
        /// <summary>
        /// генератор случайной даты в диапазоне дат
        /// </summary>
        /// <param name="start">начальная дата</param>
        /// <param name="end">конечная дата</param>
        /// <returns></returns>
        static DateTime GetRandomDay(DateTime start, DateTime end)
        {
            int countDays = (end - start).Days;
            Random rnd = new Random(Guid.NewGuid().GetHashCode());
            return start.AddDays(rnd.Next(countDays));
        }
        #endregion
 
        #region Методы комманды
        Command serializeAllWorkersToXML;
 
 
 
        //public Command SerializeAllWorkersToXML
        //{
        //    get
        //    {
        //        return serializeAllWorkersToXML ?? (serializeAllWorkersToXML = new Command(SerializeXML));
        //    };
        //}
 
        static void SerializeXML(ObservableCollection<Departament> departaments, ObservableCollection<Company> companies, ObservableCollection<Worker> workers, string path)
        {
            XDocument doc = new XDocument();
            XElement xePurpose = new XElement("Purpose");
            XAttribute xaPurpose = new XAttribute("Purpose", "Full");
 
            XElement xeCompany = new XElement("Company");
            XElement xeDepartament = new XElement("Departament");
            XElement xeWorker = new XElement("Worker");
 
            for (int c = 0; c < companies.Count; c++)
            {
                xeCompany = new XElement("Company");
                xeCompany.Add(new XAttribute("Name", companies[c].Name));
                xeCompany.Add(new XAttribute("Adress", companies[c].Adress));
                xeCompany.Add(new XAttribute("Birthday", companies[c].Birthday.Date.ToString()));
 
                for (int d = 0; d < departaments.Count; d++)
                {
                    if (departaments[d].Company.Name == companies[c].Name)
                    {
                        xeDepartament = new XElement("Departament");
                        xeDepartament.Add(new XAttribute("Name", departaments[d].Name));
                        xeDepartament.Add(new XAttribute("Description", departaments[d].Description));
                        xeDepartament.Add(new XAttribute("WorkersAmount", departaments[d].WorkersAmount));
                        for (int w = 0; w < workers.Count; w++)
                        {
                            if (workers[w].Departament == departaments[d] && workers[w].Company == companies[c])
                            {
                                xeWorker = new XElement("Worker");
                                xeWorker.Add(new XAttribute("Name", workers[w].Name));
                                xeWorker.Add(new XAttribute("Surname", workers[w].Surname));
                                xeWorker.Add(new XAttribute("Birthday", workers[w].Birthday.Date.ToString()));
                                xeWorker.Add(new XAttribute("Projects", workers[w].ProjectsAmount));
                                xeWorker.Add(new XAttribute("Salary", workers[w].Salary));
                                xeDepartament.Add(xeWorker);
                            }
                        }
                        xeCompany.Add(xeDepartament);
                    }
                }
                xePurpose.Add(xaPurpose, xeCompany);
            }
            doc.Add(xePurpose);
            doc.Save(path);
        }
 
        #endregion
 
 
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged([CallerMemberName]string prop = "")
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(prop));
        }
    }
}
Всё пока в разработке. Это учебное задание. Поэтому не обращайте внимание на всякие косяки)
0
WPF Разработчик
 Аватар для sttrox
463 / 167 / 42
Регистрация: 20.02.2018
Сообщений: 285
10.11.2019, 21:58
Alessey и trimagick77, в посте Alessey, почти есть ответ о том как получить выбранный объект.
Он использует свойство зависимости ComboBox.SelectedItem что хранит UI элемент, который отображает выбранный объект

Что бы получить выбранную сущность/объект, вам надо подвязаться на свойство зависимости ComboBox.SelectedValue. Соответственно это будет работать с любыми контролами у которых есть свойство зависимости SelectedValue.

Довольно интересно то, что после того как вы подвязали своё свойство на ComboBox.SelectValue через Binding, вы автоматически получаете событие о том, что пользователь сделал выбор в мутатор свойства (Setter)
1
8 / 6 / 4
Регистрация: 02.07.2019
Сообщений: 77
10.11.2019, 22:12
Но почему то я не могу использовать выделенный объект(( Что не так я сделал? Может быть я не правильно заполняю список для вывода... Но я пробовал с помощью for() заполнять и тоже не работало. И с линком не работает((
0
WPF Разработчик
 Аватар для sttrox
463 / 167 / 42
Регистрация: 20.02.2018
Сообщений: 285
10.11.2019, 22:17
Alessey, Вы исправили привязку на свойство зависимость?
Поскольку у Вы в вашем коде привязываетесь к SelectedItem, а надо к SelectedValue
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.11.2019, 22:17
Помогаю со студенческими работами здесь

Как получить индекс элемента или сам обьект в DataGrid WPF(MVVM)?
Помогите решить вопрос, как получить индекс элемента или сам обьект в DataGrid WPF(MVVM)? DataGrid выводит инфу из базы данных. ...

Я теряю данные на пути Controller-View-Controller. Как правильно получить модель из представления?
У меня есть модель, которая содержит несколько свойств. Есть List&lt;Point&gt; и ThranslatingCam. Свойство ThranslatingCam содержит свойства,...

Тестовое MVVM приложение не отрисовывает вью
Добрый день, пробую научиться MVVM, нашел на хабре статейку. Но там столько ошибок в коде... В общем я причесал, форма к конструкторе...

Передача значения из View (DropDownListFor) в модель
Есть 2 модели public class Country { public Guid Id { get; set; } public string Name { get; set; } ...

MVVM и динамическое добавление элементов wpf
Является ли архитектурно правильным создание динамических элементов wpf при использовании паттерна mvvm? Например, у меня в базе каждый раз...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru