1

При открытии диалогового окна для добавления элемента в бд команда add просто не реагирует. Метод окрытия:

        public ViewModelCommand OpenAddNewShopWindow
        {
            get
            {
                return openAddNewShopWindow ?? new ViewModelCommand(obj =>
                {
                    OpenAddShopWindowMethod();
            });

        }
    }
    private void OpenAddShopWindowMethod()
    {
        AddNewShopWindow newShopWindow = new AddNewShopWindow();
        SetCenterPositionAndOpen(newShopWindow);

    }

Метод добавления:

public ViewModelCommand AddNewShop
        {
            get
            {
                return addNewShop ?? new ViewModelCommand(obj =>
                {
                    Window wnd = obj as Window;
                    string result = ""; 
                    if (ShopName == null || ShopName.Replace(" ", "").Length == 0)
                    {
                        SetRedBlockControll(wnd, "NameBlock");
                        ShowMessageToUser(result);
                    }
                    else
                    {
                        result = AdminFunctiones.CreateShop(ShopName);
                        ShowMessageToUser(result);
                        wnd.Close();
                    }
                }
                );
        }
    }

Кнопка добавления в xaml:

Button Grid.Row="1" Content="Add shop" Command="{Binding AddNewShop}"
                CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" Background="#FFE5C6C6"/>

форма окна:

Но когда я перенес текст блок Name и кнопку добавления на главную страницу (т.е. просто убрал диалогjвое окно), команда выполняется. Логика добавления элемента и окрытия окна содеражатся в одной viewmodel, дата контексты к окнам подключены.

maquim4
  • 11
  • Передача компонента View в команду как параметр является грубым нарушением MVVM. Если кнопка должна делать что-то только во View, используйте обработчик события Click и пишите код-бихайнд. Другими словами, вы не можете открывать окна из ViewModel, это всё нарушает MVVM, отсюда и проблемы. Но нужны ли окна? – aepot Nov 26 '22 at 11:57
  • https://ru.stackoverflow.com/a/727774/373567 про окна в MVVM – aepot Nov 26 '22 at 12:05
  • Как и сказали выше, у вас нарушение MVVM, ибо вы используете UI элементы (окно) в ViewModel слое, когда как при MVVM подходе, у вас должна быть максимально развязанная архитектура, где UI не зависит от других слоев, даже не знает что-либо про них; ViewModel не знает про UI, а Model не знает про V и VM. Если всеж хотите решить то, что написали, то первый тогда вопрос - где DataContext у открываемого окна? Для правильной привязки нужны 3 вещи: 1. DataContext на класс с данными. 2. В классе данных публичное свойство. 3. В XAML указание имени этого публичного свойства через Binding. – EvgeniyZ Nov 26 '22 at 15:12

0 Answers0