powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Получения данных из DataGrid WPF MVVM
25 сообщений из 450, страница 3 из 18
Получения данных из DataGrid WPF MVVM
    #38461311
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныМСУВы чего, люди? Вью модель ничего не должна знать о окне! Это железобетонно.
Ну, раз уж пошла такая пьянка (про pure MVVM), то ViewModel ничего не должна знать о Window как о классе, т.е. сборка с ViewModel не должна зависеть от WindowsBase, PresentationCore, etc. А открытие окна из модели нужно делать в сервисе путем дергания инжекта. Иначе ночью придет джошсмит, и расстреляет из реактивного говномета.+1
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461407
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу тогда мучайся, тебя предупредили.
А где мучение? У меня всё работает. Просто я спросил, красиво ли так делать и быть может есть более разумные способы решения. А прибивать к вьюмодели гвозди - это жесть.

Алексей ККак тебе решение ? Оно тебе надо? :-)
Жуть. Оно мне не надо. Задача решается намного проще - через отдельный сервис окон IWindowService, как я уже писал. На ICommand вешаем свой вьюмодельный RelayCommand, в котором через инверсию общаемся с IWindowService, который всё знает о окнах. Никаких проблем, всё линейно и красиво.

Алексей КА главное, не надо подписываться из View на события ViewModel, есть опасность утечки памяти, если время жизни ViewModel больше чем View. Например, если View является ControlTemplate/DataTemplate. Лучше смотри решение через жопу присоединяемое свойство.
В моём случае, который я обрисовал, где утечка памяти? У меня самый простой случай, без всяких присоединяемых свойств и прочей мути. Классическая инъекция зависимости в виде отдельного оконного слоя.

Алексей КА теперь ответь себе на вопрос - тебе нужно несколько View к одной ViewModel? :-)
1. У каждого окна своя вьюмодель.
2. Вьюмодель не имеет ссылки на окно.
3. Общение с окнами происходит через отдельный сервис окон.
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461413
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныМСУВы чего, люди? Вью модель ничего не должна знать о окне! Это железобетонно.
Ну, раз уж пошла такая пьянка (про pure MVVM), то ViewModel ничего не должна знать о Window как о классе, т.е. сборка с ViewModel не должна зависеть от WindowsBase, PresentationCore, etc. А открытие окна из модели нужно делать в сервисе путем дергания инжекта. Иначе ночью придет джошсмит, и расстреляет из реактивного говномета.
Так ViewModel и так ничего не знает о Window классе, она общается с сервисом окон. А сервис окон знает о Window. ViewModel у меня не зависит от WindowsBase и PresentationCore. У меня всё именно так и работает.

Код: 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.
public class EmployeesViewModel : INotifyPropertyChanged
{
    private IDataContext Context;
    private IWindowService Service;

    public EmployeesViewModel()
    {
        LastName = "3";

        Context = new DataContext(); // todo IoC resolve
        Service = new WindowService(); // todo IoC resolve
    }

    public IEnumerable<Employee> Employees
    {
        get
        {
            if (string.IsNullOrEmpty(LastName))
            {
                return Enumerable.Empty<Employee>();
            }

            return Context.GetEmployees().Where(d => d.LastName.Contains(LastName));
        }
    }

    private string _lastName;
    public string LastName
    {
        get
        {
            return _lastName;
        }
        set
        {
            _lastName = value;
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("LastName"));
            }
        }
    }

    public ICommand FindCommand
    {
        get
        {
            return new RelayCommand((action) =>
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("Employees"));
                }
            });
        }
    }

    public ICommand EmployeeSelectCommand
    {
        get
        {
            return new RelayCommand((action) =>
            {
                if (PropertyChanged != null && action != null)
                {                        
                    if (Service.OpenEmployeeDetailWindow(action as Employee))
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("Employees"));
                    }
                }
            });
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}    
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461425
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЗадача решается намного проще - через отдельный сервис окон IWindowService, как я уже писал. На ICommand вешаем свой вьюмодельный RelayCommand, в котором через инверсию общаемся с IWindowService, который всё знает о окнах текущем окне .Этого может быть недостаточно.
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461429
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУВ моём случае, который я обрисовал, где утечка памяти?В твоём случае нет. Я про общий случай.
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461433
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЭтого может быть недостаточно.
Примеры в студию, когда сервис окон курит в сторонке.

Алексей КВ твоём случае нет. Я про общий случай.
А зачем тогда меня пугаешь? :)
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461436
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЗадача решается намного проще - через отдельный сервис окон IWindowService, как я уже писал. На ICommand вешаем свой вьюмодельный RelayCommand, в котором через инверсию общаемся с IWindowService, который всё знает о окнах текущем окне окнах

Application.Current.Windows
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461440
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КНу тогда мучайся, тебя предупредили.
А где мучение? У меня всё работает.Само собой работает. Но я про удобства.
МСУПросто я спросил, красиво ли так делать и быть может есть более разумные способы решения. А прибивать к вьюмодели гвозди - это жесть.Ещё ни разу не встречал разумного объяснения, в чём эта "жесть" заключается. Чего мне такого неприятного придётся пережить, если я назло всем сделаю ссылку от ViewModel к View? :-)

А меж тем, сам Микрософт такими ссылками балуется. Смотри метод Control.GetTemplateChild. Это самое оно.
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461444
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУМСУЗадача решается намного проще - через отдельный сервис окон IWindowService, как я уже писал. На ICommand вешаем свой вьюмодельный RelayCommand, в котором через инверсию общаемся с IWindowService, который всё знает о окнах текущем окне окнах

Application.Current.WindowsНу и какое из них привязано к "этой" ViewModel?
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461448
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУА зачем тогда меня пугаешь? :)Чтоб не расслаблялся.
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461453
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КСамо собой работает. Но я про удобства.
Зачем мне подсовывать в виде "удобства" это ? Если у меня и так всё работает ? :)

Алексей КЕщё ни разу не встречал разумного объяснения, в чём эта "жесть" заключается.
Задайся вопросом, ради чего тогда нужна вьюмодель. Только не торопись с ответом.

Алексей КЧего мне такого неприятного придётся пережить, если я назло всем сделаю ссылку от ViewModel к View? :-)
Чего мне такого неприятного придётся пережить, если я логику буду писать в виде лапшекода из 10К строк в контроллере? :)

Алексей КА меж тем, сам Микрософт такими ссылками балуется. Смотри метод Control.GetTemplateChild. Это самое оно.
Так это же System.Windows.Controls. Или ты о чем?
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461454
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУпропущено...
Application.Current.WindowsНу и какое из них привязано к "этой" ViewModel?
Активное. Но я могу привязать любое, мне кто-то запрещает? Например, вязаться по имени.

Алексей КМСУА зачем тогда меня пугаешь? :)Чтоб не расслаблялся.
Ок :)
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461459
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КЕщё ни разу не встречал разумного объяснения, в чём эта "жесть" заключается.
Задайся вопросом, ради чего тогда нужна вьюмодель. Только не торопись с ответом.Её можно наследовать, а UserControl - нет. Её можно повторно использовать с разными View, в отличие от code-behind. Для меня это основные причины для выделения фрагмента code-behind в отдельный класс.

МСУАлексей КЧего мне такого неприятного придётся пережить, если я назло всем сделаю ссылку от ViewModel к View? :-)
Чего мне такого неприятного придётся пережить, если я логику буду писать в виде лапшекода из 10К строк в контроллере? :)10К лапшекода можно настрочить в отдельном классе с не меньшим успехом.

МСУАлексей КА меж тем, сам Микрософт такими ссылками балуется. Смотри метод Control.GetTemplateChild. Это самое оно.
Так это же System.Windows.Controls. Или ты о чем?О нём самом. Класс-потомок Control - это ViewModel, ControlTemplate - это View. Как тебе такой подход? :-)
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461467
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Кпропущено...
Ну и какое из них привязано к "этой" ViewModel?
Активное. Но я могу привязать любое, мне кто-то запрещает? Например, вязаться по имени .Здравствуй Prism с его RegionManager. Ну и накой эти педали? Не проще иметь ссылку на View?
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461469
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУпропущено...

Активное. Но я могу привязать любое, мне кто-то запрещает? Например, вязаться по имени .Здравствуй Prism с его RegionManager. Ну и накой эти педали? Не проще иметь ссылку на View?Там самое интересное начинается, когда в приложении появляется несколько регионов с одинаковым именем. Был тут такой вопрос на форуме....
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461481
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЕё можно наследовать, а UserControl - нет.
Мне это не нужно, я же говорил, что вью модель одна у окна. Во-вторых, она используется для разделения модели и её представления, что необходимо для изменения их по-отдельности. Например, разработчик задает логику работы с данными, а дизайнер соответственно работает с пользовательским интерфейсом. Рефакторить и довинчивать функционал к такой архитектуре - одно удовольствие. Что-то похожее с asp.net mvc представлением cshtml.

Алексей КЕё можно повторно использовать с разными View, в отличие от code-behind.
Нахрен не нужно, уже ответил.

Алексей КДля меня это основные причины для выделения фрагмента code-behind в отдельный класс.
Причины высосаны из пальца и просто унылы, извини... :)

Алексей К10К лапшекода можно настрочить в отдельном классе с не меньшим успехом.
О чем я и говорю, поэтому смысл писать про "можно ли это пережить". Пережить можно даже ассемблерные вставки в дельфи коде :)

Алексей КО нём самом. Класс-потомок Control - это ViewModel, ControlTemplate - это View. Как тебе такой подход? :-)
С каких красот Control это ViewModel? :)

Алексей КЗдравствуй Prism с его RegionManager. Ну и накой эти педали? Не проще иметь ссылку на View?
Ну мне это не нужно, у меня маппинг окна в оконном сервисе происходит по активности. Этого достаточно же.

Алексей КТам самое интересное начинается, когда в приложении появляется несколько регионов с одинаковым именем. Был тут такой вопрос на форуме....
Организуй демку, а то не понятно. Пожуём, пощупаем :)
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461498
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

а вот интересно твой "оконный сервис" как поможет в задаче получить значения какого-то свой-ва View? Не окна, а какого-то контрола в окне? Например, это может быть связано с пересчетом координат и тут VM вряд ли поможет :)
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461507
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КЕё можно наследовать, а UserControl - нет.
Мне это не нужноЭто пока. Потом захочется иметь типовой функционал, например, для форм редактирования.

МСУВо-вторых, она используется для разделения модели и её представления, что необходимо для изменения их по-отдельности. Например, разработчик задает логику работы с данными, а дизайнер соответственно работает с пользовательским интерфейсом. Рефакторить и довинчивать функционал к такой архитектуре - одно удовольствие. Что-то похожее с asp.net mvc представлением cshtml.Но это же банально. Я просто об этом не говорю. :-)

МСУАлексей КЕё можно повторно использовать с разными View, в отличие от code-behind.
Нахрен не нужно, уже ответил.У тебя всё ещё впереди, если собрался плотно этим заниматься. :-)

МСУАлексей КДля меня это основные причины для выделения фрагмента code-behind в отдельный класс.
Причины высосаны из пальца и просто унылы, извини... :)Время нас рассудит. :-)

МСУАлексей КО нём самом. Класс-потомок Control - это ViewModel, ControlTemplate - это View. Как тебе такой подход? :-)
С каких красот Control это ViewModel? :)В контексте отдельного элемента управления - именно так. Но это моё эксклюзивное видение ситуации. Такого ты больше нигде не встретишь. :-)

МСУАлексей КЗдравствуй Prism с его RegionManager. Ну и накой эти педали? Не проще иметь ссылку на View?
Ну мне это не нужно, у меня маппинг окна в оконном сервисе происходит по активности. Этого достаточно же.Сегодня не нужно, завтра потребуется. Но дело твоё, уговаривать не собираюсь. :-)

МСУАлексей КТам самое интересное начинается, когда в приложении появляется несколько регионов с одинаковым именем. Был тут такой вопрос на форуме....
Организуй демку, а то не понятно. Пожуём, пощупаем :)Я как раз сейчас заканчиваю работу над "фреймворк" + "демка" + "мануал" для нашего внутреннего использования. Высока вероятность её публикации в Интернете. Там всё будет. :-)
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461509
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanМСУ, а вот интересно твой "оконный сервис" как поможет в задаче получить значения какого-то свой-ва View? Не окна, а какого-то контрола в окне? Например, это может быть связано с пересчетом координат и тут VM вряд ли поможет :)
netivan, не гоже такие ламерские вопросы задавать мне, не впф-нику... :)
Получить значения какого-то свой-ва View поможет вьюмодель, которая привязана к датаконтексту. Вьюмодель общается через IoC с оконным сервисом, поэтому это значение смело уйдёт в него и помашет ручкой.
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461530
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЭто пока. Потом захочется иметь типовой функционал, например, для форм редактирования.
Я решаю проблемы по мере их поступления :)

Алексей КНо это же банально. Я просто об этом не говорю. :-)
...[image=http://file.mobilmusic.ru/fc/ab/e2/975487-220.jpg]


Алексей КУ тебя всё ещё впереди, если собрался плотно этим заниматься. :-)
В вебе каждая страница была своя, никаких наследований и прочей ерунды. Наследование было на уровне модели представления и только. Проблем никаких. Так на кой оно мне в xaml нужно? :)

Алексей КВремя нас рассудит. :-)
Я забыл о "наследовании форм" еще со времен дельфи кодирования... Наследование в виде базового класса для модели - это как пить дать. Но наследование гуя... в топку. Ты просто обязан со мной согласиться. Потому что я чую, что ты нихрена не пользуешься наследованием UI. Ну признайся честно? Ну пецдишь веть

МСУпропущено...

С каких красот Control это ViewModel? :)В контексте отдельного элемента управления - именно так. Но это моё эксклюзивное видение ситуации. Такого ты больше нигде не встретишь. :-)

Алексей КСегодня не нужно, завтра потребуется. Но дело твоё, уговаривать не собираюсь. :-)
Вот я и спросил про эти ситуации, может ли моя "активность окна" выйти боком. А ты накинулся пугать какими-то аттачед пропертями, учетками и прочими гадостями. Просто я пока не могу придумать кейс, в котором моя активность окна положит архитектуру на лопатки... Вообщем, тебе задача - придумать такой кейс, чтобы я спал спокойно - исходники демки прилагаю. И не противься, просто сделай вещи :)

Алексей КЯ как раз сейчас заканчиваю работу над "фреймворк" + "демка" + "мануал" для нашего внутреннего использования. Высока вероятность её публикации в Интернете. Там всё будет. :-)
Ну там будет много лохмотьев, которые мне пока не нужны и только замусолят мне моск. Я хочу конкретного ответа по конкретному узкому вопросу :)
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461533
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

т.е. VM скажет твоему сервису найди мою View по моему Ctx в этом окне? Кстати,а если окно WinForm?
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461546
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanМСУ, т.е. VM скажет твоему сервису найди мою View по моему Ctx в этом окне?
Я же всё объяснил кодом 15113285

netivanКстати,а если окно WinForm?
Какая разница. VM вообще ничего не знает о том, WPF это или WinForms.
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461553
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КУ тебя всё ещё впереди, если собрался плотно этим заниматься. :-)
В вебе каждая страница была своя, никаких наследований и прочей ерунды. Наследование было на уровне модели представления и только. Проблем никаких. Так на кой оно мне в xaml нужно? :)
МСУАлексей КВремя нас рассудит. :-)
Я забыл о "наследовании форм" еще со времен дельфи кодирования... Наследование в виде базового класса для модели - это как пить дать. Но наследование гуя... в топку. Ты просто обязан со мной согласиться. Потому что я чую, что ты нихрена не пользуешься наследованием UI. Ну признайся честно? Ну пецдишь веть Я говорю как раз о наследовании [View]Model. Про наследование View я не говорил. Ты запутался. :-)
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461557
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУКакая разница. VM вообще ничего не знает о том, WPF это или WinForms.Оптимист.
...
Рейтинг: 0 / 0
Получения данных из DataGrid WPF MVVM
    #38461559
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЯ говорю как раз о наследовании [View]Model. Про наследование View я не говорил. Ты запутался. :-)
Бать, так а какая проблема отнаследоваться от вьюмодели?
...
Рейтинг: 0 / 0
25 сообщений из 450, страница 3 из 18
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Получения данных из DataGrid WPF MVVM
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]