0

Всем здравствуйте, встала проблема, в моем приложении в датагрид есть данные, при клике на строку я открываю новое окно, но как сделать правильно в рамках mvvm, чтобы передать в новое окно контекст, мне нужно просто отобразить в новом окне данные из выделенной в датагрид строке. Не хочу делать новую viewModel для нового окна.

Вот команда открытия окна:

public Comand OpenWindow
{
    get
    {
        return new Comand(async () =>
        {
            // это свойство выделеннйостроки
                var ss = CurrentItem;

                VakansNAME = ((Resume)ss).VacansName;

                var Forotpmp = ((Resume)ss).Foto;
            // получаю фото
                FOTO= await justDo.GetFoto(Forotpmp);
            // открываю новое окно
            var window =new Window1();
            window.Show();

        });

    }
}
Ver Nick
  • 2,653
  • 1
    var window =new Window1(); window.DataContext = {ваш datacontext};? – tym32167 Sep 26 '18 at 10:40
  • @tym32167 Спасибо за ответ, а вот вопрос,мой datacontext какой, если эту команду я вызываю из моей ViewModel, то есть мне как то вызывать свой датаконтекст получается? – Vladimr Vladimirovoch Sep 26 '18 at 10:43
  • 1
    Если ваша вьюмодель - этот тот объект, который вы хотите передать как контекст, то window.DataContext = this; – tym32167 Sep 26 '18 at 10:45
  • @АндрейNOP ваша ссылка очень полезная, но дубликат ли это? ведь вопрос о передаче контекста, а не о открытии новых окон – tym32167 Sep 26 '18 at 10:46
  • @АндрейNOP не дубликат вопроса,спасибо за ответ. Вопрос в связи датаконтекста и viewmodel при случае открытии нового окна – Vladimr Vladimirovoch Sep 26 '18 at 10:47
  • @tym32167, если бы был однозначный дубликат — я бы ударил молотом :) – Андрей NOP Sep 26 '18 at 10:47
  • @АндрейNOP окей ) – tym32167 Sep 26 '18 at 10:48
  • Ну и, конечно, VM не должна явно создавать и открывать окно. А должен делать это сервис создания окон, на который я дал ссылку :) – Андрей NOP Sep 26 '18 at 10:48
  • @АндрейNOP скажем так, многое в представленном коде вызывает вопросы (например, зачем каждый раз при обращении создавать команду) – tym32167 Sep 26 '18 at 10:50
  • @АндрейNOP Vm в моем случае реализует команду для открытия окна и все. То есть идет команда окно открывается, Просто если в winforms я бы просто передал в конструктор окна нужные мне данные и все,а тут вот загвоздка – Vladimr Vladimirovoch Sep 26 '18 at 10:54
  • В чем загвоздка? Я вас не понимаю. Я вам говорю про то, что VM не должна знать про GUI и тем более явно создавать его части – Андрей NOP Sep 26 '18 at 10:56
  • @АндрейNOP а как я без команды открою, у меня во view по вашему же методу привязана команда. – Vladimr Vladimirovoch Sep 26 '18 at 10:56
  • С помощью сервиса, например, как в приведенной ссылке. В прочем, делайте так как считаете нужным, я просто дал ссылку, которая может оказаться полезной вам или тому, кто будет читать вопрос в дальнейшем. – Андрей NOP Sep 26 '18 at 10:58
  • @АндрейNOP VM оперирует свойствами, к которым привязана View, я и пытаюсь сделать нужные мне свойства, командой вызвать открытие окна и предать в него то,что хочу отобразить, или я методологически не прав? – Vladimr Vladimirovoch Sep 26 '18 at 10:58
  • @АндрейNOP Ваша ссылка хорошая, я пока не могу точно понять ее алгоритм, но пробовать буду, то есть вы полагаете,что открытие любых окон, лучше делать так,как вы указали в ссылке? А вызывать мне это открытие как? Опять же вопрос с контекстом – Vladimr Vladimirovoch Sep 26 '18 at 11:01
  • Там есть пример использования, создайте пустой проект и попробуйте его, разберите. Если вы используете какой-то MVVM-фреймворк, то в нем скорее всего есть что-то подобное в комплекте. Почитайте документацию. Ну а по сути ЭТОГО вопроса вам уже выше ответили. – Андрей NOP Sep 26 '18 at 11:03
  • 1
    У вас в переменной ss уже есть информация о выбранной строке, если фото не нужно передавать в открываемое окно, то вы можете сделать вот так: window.DataContext = ss; А если фотов открываемом окне нужно, то и получать вы его можете в нем. – Алексей Лосев Sep 26 '18 at 11:58

0 Answers0