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

Как отправить данные из одного VM в другой?

23.11.2022, 18:40. Показов 2544. Ответов 56
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
У меня есть на Главном окне (Окно1) treeView, в нем разделы и подразделы (Компании и Отделы).
При выборе Компании на форме появляется кнока, открывающая окно добавления Отдела (Окно2) (в коллекцию Отделы выбранной Компании).
Окно2 и его VM ничего не знает о компании, в которую добавляется отдел.
Я могу бы, например, из VM Окна2 вызвать метод модели приложения, куда бы передал созданный объект, модель бы залезла в VM Окна1 (тоже возбудила бы какое-то событие), получила бы отуда выбранную компанию и в нее сохранила бы созданный объект. Получается довольно запутанно.
Это хорошая идея?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.11.2022, 18:40
Ответы с готовыми решениями:

Как отправить файл с одного пк на другой. Не получить из внешнего хранилища, а именно отправить с одного на другой
Привет всем. У меня тут возникла идея сделать одну программку и в ней будет функция отправки небольших файлов. Я подумал что можно...

Как отправить данные взятые с одного сайта на другой?
Допустим я получил данные с помощью парсинга из одного сайта, и мне нужно загрузить эти данные на другой сайт. На этом сайте есть редактор...

Как можно отправить данные с одного сайта на другой с jQuery
Кто сможет подсказать как эту задачу решить Помогите найти решение как можно сделать передачу данных нужно передать с одного сайта на...

56
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
24.11.2022, 14:43
Студворк — интернет-сервис помощи студентам
Vanka03, чтобы не делать Behavior для каждого свойства, то вот обобщённая реализация:
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
using Microsoft.Xaml.Behaviors;
using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Data;
 
namespace Companies.VMs
{
    /// <summary>Для создания привязки от любого <see cref="DependencyProperty"/>,
    /// в том числе "только для чтения".</summary>
    public class ReadOnlyBinding : Behavior<DependencyObject>
    {
 
        private bool isSeal;
        private DependencyProperty? _property;
        private BindingBase? _sourceBinding;
        public BindingBase? SourceBinding
        {
            get => _sourceBinding;
            set
            {
                if (isSeal)
                    throw new InvalidOperationException("Запечатан!");
                _sourceBinding = value;
                if (value is null)
                {
                    BindingOperations.ClearBinding(this, SourceProperty);
                }
                else
                {
                    BindingOperations.SetBinding(this, SourceProperty, value);
                }
            }
        }
 
 
        public DependencyProperty? Property
        {
            get => _property;
            set
            {
                if (isSeal)
                    throw new InvalidOperationException("Запечатан!");
                _property = value;
            }
        }
 
        /// <summary><see cref="DependencyProperty"/> для свойства <see cref="Source"/>.</summary>
        private static readonly DependencyProperty SourceProperty =
            DependencyProperty.Register("Source", typeof(object), typeof(ReadOnlyBinding), new PropertyMetadata(null));
 
 
        protected override void OnAttached()
        {
            isSeal = true;
            if (Property is null)
                throw new NullReferenceException(nameof(Property));
 
            base.OnAttached();
 
            DependencyPropertyDescriptor
                .FromProperty(Property, AssociatedObject.GetType())
                .AddValueChanged(AssociatedObject, OnPropertyValueChanged);
            OnPropertyValueChanged(AssociatedObject, EventArgs.Empty);
        }
 
        private void OnPropertyValueChanged(object? sender, EventArgs e)
        {
            SetValue(SourceProperty, AssociatedObject.GetValue(Property));
        }
 
        protected override void OnDetaching()
        {
            base.OnDetaching();
            DependencyPropertyDescriptor
                .FromProperty(Property, AssociatedObject.GetType())
                .RemoveValueChanged(AssociatedObject, OnPropertyValueChanged);
        }
 
    }
}
XML
23
24
25
26
27
28
        <TreeView Grid.Column="0" Name="treeView1" 
                  ItemsSource="{Binding Roots, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
                  Margin="0,0,0,219">
            <i:Interaction.Behaviors>
                <vms:ReadOnlyBinding  SourceBinding="{Binding SelectedItem, Mode=TwoWay}"
                                      Property="TreeView.SelectedItem"/>
Добавлено через 6 минут
Цитата Сообщение от Vanka03 Посмотреть сообщение
Я реализовал конвертер, похожий на Ваш, но столкнулся с проблемой: ..... Что-то можно с этим сделать?
Я не вижу вашей реализации и как вы пытаетесь её использовать.
Поэтому не могу сказать, что не так с ней.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
24.11.2022, 15:12
Vanka03, чем делать отдельный конвертер для каждого типа, лучше создать обобщенный.
Вот такой конвертер:
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
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
using System.Windows.Markup;
 
namespace Companies.VMs
{
    [ValueConversion(typeof(object), typeof(Visibility))]
    public class TypeEqualsToVisibleConverter : IValueConverter
    {
        public Type? Type { get; }
 
        public TypeEqualsToVisibleConverter(Type? type)
        {
            Type = type;
        }
 
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is null)
            {
                return Visibility.Collapsed;
            }
            return value.GetType().IsAssignableTo(Type) ? Visibility.Visible : Visibility.Collapsed;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
 
    }
 
    [MarkupExtensionReturnType(typeof(TypeEqualsToVisibleConverter))]
    public class TypeEqualsToVisible : MarkupExtension
    {
        public Type? Type { get; set; }
 
        public TypeEqualsToVisible(Type? type)
        {
            Type = type;
        }
 
        public TypeEqualsToVisible()
        { }
 
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return new TypeEqualsToVisibleConverter(Type);
        }
    }
 
}
XML
41
42
        <DataGrid Visibility="{Binding SelectedItem,
                                       Converter={vms:TypeEqualsToVisible models:Company}}" .....>
1
4 / 4 / 0
Регистрация: 01.11.2013
Сообщений: 216
24.11.2022, 18:24  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я не вижу вашей реализации и как вы пытаетесь её использовать.
Она находится в ветке OneVM

Добавлено через 6 минут
Если не хочется копаться в ветках, то я напишу, когда в мастер все смержу.

Добавлено через 18 минут
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вот такой конвертер:
Выложил все в мастер, класс называется VMs/ConverterToArray.cs
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
24.11.2022, 19:26
Цитата Сообщение от Vanka03 Посмотреть сообщение
Если не хочется копаться в ветках,
Норм.
Просто не пришло в голову ветки посмотреть.

И скиньте мне приглашение на EldHasp (аватарка такая же как здесь на форуме).
Буду свои предложения сразу в отдельной ветке фиксировать.

Добавлено через 3 минуты
Vanka03, ещё подумайте над тем чтобы разделить не по папкам, а по проектам.
Так же не следует давать одинаковые названия разным типам.
Наткнулся на Company и никак не мог понять почему конвертер не работает.
Оказывается есть два разных Company.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
24.11.2022, 20:07
Vanka03, неверная реализация конвертера public class ConverterToArray .
Во-первых, переименуйте - правильно ToArrayConverter .

А сама реализация должна быть такой:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Globalization;
using System.Windows.Data;
 
namespace Companies.VMs
{
    public class ToArrayConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value == null)
                return Array.Empty<object>();
            var array = Array.CreateInstance(value.GetType(), 1);
            array.SetValue(value, 0);
            return array; ;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}
Добавлено через 4 минуты
И не ленитесь добавлять расширение разметки.
Это же значительно облегчает XAML.
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
using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Markup;
 
namespace Companies.VMs
{
    [ValueConversion(typeof(object), typeof(Array))]
    public class ToArrayConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value == null)
                return Array.Empty<object>();
            var array = Array.CreateInstance(value.GetType(), 1);
            array.SetValue(value, 0);
            return array; ;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
 
        private ToArrayConverter() { }
        public static ToArrayConverter Instance { get; } = new ToArrayConverter();
    }
 
    [MarkupExtensionReturnType(typeof(ToArrayConverter))]
    public class ToArrayExtension : MarkupExtension
    {
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return ToArrayConverter.Instance;
        }
    }
}
Добавлено через 3 минуты
Файл БД из последних коммитов потерялся - и проект не собирается из=за этого.

Добавлено через 15 минут
Vanka03, база данных в ветке мастер пустая?
1
4 / 4 / 0
Регистрация: 01.11.2013
Сообщений: 216
24.11.2022, 20:08  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
И скиньте мне приглашение на EldHasp
Готово
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Во-первых, переименуйте - правильно ToArrayConverter.
Я подумал, что очень удобно все файлы конвертеров будут располагаться друг за другом, если все они будут начитнаться на слово "Converter".
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
24.11.2022, 20:16
Цитата Сообщение от Vanka03 Посмотреть сообщение
Я подумал, что очень удобно все файлы конвертеров будут располагаться друг за другом, если все они будут начитнаться на слово "Converter".
Но для английского языка очень коряво: Преобразование Конвертера в Массив.
Английский хоть на таком элементарном уровне для программиста нужно знать.

Добавлено через 3 минуты
Vanka03, У меня почему-то в ветке OneVM не работает получение данных из БД.
Первый раз когда проверял в мастер (часа 4-5 назад) вроде всё работало.

База на GitHUb пустая.
Я записал одну компанию "руками" но не забирает её.
Закинь в репозиторий базу с гарантированно рабочими данными (2-3 узла). Чтобы я не гадал что да как.
0
4 / 4 / 0
Регистрация: 01.11.2013
Сообщений: 216
24.11.2022, 20:25  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
А сама реализация должна быть такой:
К сожалению, не помогло, эффект тот же. Я запушил ветку BadConvertor.
Я поставил точку останова в методе Convert, попал туда только один раз при запуске приложения.

Добавлено через 2 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
База на GitHUb пустая.
Я заменил файл БД на Newcompanies.db, мб в этом дело? Но ConnStr я тоже поменял, все должно было обновиться само. Сейчас гляну
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
24.11.2022, 20:28
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Закинь в репозиторий базу с гарантированно рабочими данными (2-3 узла). Чтобы я не гадал что да как.
И база должна быть в корне проекта, а не решения.

Добавлено через 25 секунд
Цитата Сообщение от Vanka03 Посмотреть сообщение
Я заменил файл БД на Newcompanies.db,
Проверю.

Добавлено через 53 секунды
В проект включена companies.
И из-за её отсутствия выдаёт ошибку.
0
4 / 4 / 0
Регистрация: 01.11.2013
Сообщений: 216
24.11.2022, 20:28  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
В проект включена companies.
И из-за её отсутствия выдаёт ошибку.
Да, я это только что исправил и запушил OneVM
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
24.11.2022, 20:32
Newcompanies.db - пустая.
В ней даже структуры (таблиц) нет.

Добавлено через 3 минуты
Newcompanies.db - в проекте пустая.
После старта создаётся в сборке с таблицами.
Но таблицы все пустые.
Для образца закинь в проект с данными.
0
4 / 4 / 0
Регистрация: 01.11.2013
Сообщений: 216
24.11.2022, 20:45  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Newcompanies.db - в проекте пустая.
Я поставил у файла свойста BuildAction - resource, Copy to OutputDirectory - Copy Always, думал будет сама обновляться, но она этого не делает. Сейчас руками закину.

Добавлено через 7 минут
Сейчас в ветке OneVM лежит база весом 28 КБ, вроде должна быть заполнена. Ветка OneVM была всмержена с мастером часа 3 назад, в принципе, она уже неактуальна, можно просто мастер смотреть.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
24.11.2022, 21:04
Цитата Сообщение от Vanka03 Посмотреть сообщение
Сейчас в ветке OneVM лежит база весом 28 КБ
Угу. Сейчас с данными.

Добавлено через 1 минуту
Цитата Сообщение от Vanka03 Посмотреть сообщение
Я поставил у файла свойста BuildAction - resource
Нужно "содержание".
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
24.11.2022, 21:41
Vanka03, оправил фиксацию с рабочим конвертером.
Применил его вместо вашего типа Root.
1
4 / 4 / 0
Регистрация: 01.11.2013
Сообщений: 216
24.11.2022, 22:57  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
оправил фиксацию с рабочим конвертером.
Спасибо, завтра посмотрю!
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
24.11.2022, 23:25
Цитата Сообщение от Vanka03 Посмотреть сообщение
завтра посмотрю!
Сделал чуток рефакторинга. Потратил на это пару часов.
Посмотрите. Разберитесь в изменениях.
И постарайтесь понять почему так, а не этак.

Следующим шагом я бы инкапсулировал DbContext.

Добавлено через 1 минуту
Обратите внимание там много файлов исключено из проекта.
Я их не удалил, чтобы вы не запутались.
Как разберётесь их всех нужно будет удалить.
1
4 / 4 / 0
Регистрация: 01.11.2013
Сообщений: 216
25.11.2022, 17:47  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Сделал чуток рефакторинга. Потратил на это пару часов.
Посмотрите. Разберитесь в изменениях.
И постарайтесь понять почему так, а не этак.
Спасибо, изучу!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.11.2022, 17:47
Помогаю со студенческими работами здесь

Принять данные с одного порта, распарсить и отправить на другой порт
Доброго времени суток, уважаемые! Второй день сижу над задачей сам себя уже запутал читая все мануалы.. Суть такая: на определенный порт...

Как отправить файл с одного компьютера на другой
Как отправить файл с одного компьютера на другой?

Как отправить сообщение с одного email-а на другой?
Добрый день Господа . Вопрос следующий как отправить с одной почты на другую сообщение . В каком направлении копать , может исходник есть у...

Как отправить Post запрос с одного сервера на другой
Добрый вечер. Вопрос в теме. Пробовал так: http.request(url, function(req, res) { }); Но таким способом не происходит ни ошибки,...

Как отправить сообщение с одного компьютера на другой компьютер в локальной сети?
Необходимо, зная ip адрес или имя компьютера вывести сообщение с одного компьютера на другой. как это осуществить. заранее спасибо за...


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

Или воспользуйтесь поиском по форуму:
57
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru