0

В общем, пытаюсь реализовать, что при переходе на страницу услуг, они должны выводится в StackPanel, каждой услуге свой StackPanel с определённой разметкой. Суть такая что при запуске программы и переходе на страницу, страница просто пустая, хотя метод запускается и всё проходит.

Вот метод, который призывается после инициализации.

private void GenerateList()
        {
            foreach (Service service in AvtoService.Service.ToList())
            {
                //Создание StackPanel которая будет являтся оболочкой для карточки услуги
                StackPanel stackPanel = new StackPanel()
                {
                    HorizontalAlignment = HorizontalAlignment.Stretch,
                    VerticalAlignment = VerticalAlignment.Top,
                    Margin = new Thickness(10)
                };
            //Добавление созданного StackPanel на Grid
            MainServicesGrid.Children.Add(stackPanel);

            //Создание внутреннего Grid'а
            Grid gridIn = new Grid();

            //Объявление строк и столбцов для Grid'а
            ColumnDefinition gridCol1 = new ColumnDefinition()
            {
                Width = new GridLength(2, GridUnitType.Star),
            };
            ColumnDefinition gridCol2 = new ColumnDefinition()
            {
                Width = new GridLength(3, GridUnitType.Star),
            };
            ColumnDefinition gridCol3 = new ColumnDefinition()
            {
                Width = new GridLength(3, GridUnitType.Star),
            };

            RowDefinition gridRow1 = new RowDefinition();
            RowDefinition gridRow2 = new RowDefinition();
            RowDefinition gridRow3 = new RowDefinition();
            RowDefinition gridRow4 = new RowDefinition();

            //Добавление объявленных строк и столбцов во внутренний Grid
            gridIn.ColumnDefinitions.Add(gridCol1);
            gridIn.ColumnDefinitions.Add(gridCol2);
            gridIn.ColumnDefinitions.Add(gridCol3);

            gridIn.RowDefinitions.Add(gridRow1);
            gridIn.RowDefinitions.Add(gridRow2);
            gridIn.RowDefinitions.Add(gridRow3);
            gridIn.RowDefinitions.Add(gridRow4);

            //Добавление внутреннего Grid'а в StackPanel
            stackPanel.Children.Add(gridIn);

            //Инициализация изображения для ImageSource
            BitmapImage BtmpImg = new BitmapImage();
            BtmpImg.UriSource = new Uri(service.MainImagePath,UriKind.Relative);

            //Создание элемента Image
            Image image = new Image()
            {
                Source = BtmpImg,
                Margin = new Thickness(5),
            };

            //Привязка изображения к Grid
            image.SetValue(Grid.RowSpanProperty, 4);
            image.SetValue(Grid.ColumnProperty, 0);

            stackPanel.Children.Add(image);
        }

MainServicesGrid это x:Name грида на форме в XAML.

Тут метод вызывается

public partial class ServicesPage : Page
    {
        AvtoServiceEntities AvtoService;
    public ServicesPage(bool IsUserAdmin)
    {
        AvtoService = new AvtoServiceEntities();

        InitializeComponent();

        GenerateList();       
    }

Нужно снова натыкать носом в ошибки, и подсказать почему не выводятся элементы. Пробовал по-всякому и на события инициализации и loaded назначать и ставить генерацию вне метода. Страницы вызываются во Frame который находится на главном окне.

Warden
  • 19
  • 3
    Почему вдруг динамика = C# код? Вы знаете что такое привязки? Если да, то почему не используете? Если нет, то идите учите, ибо бессмысленно использовать WPF без них! Также Frame, забудьте про него! Если хотите делать изменяемый контент, то это делается совершенно иначе (и опять привет привязки). – EvgeniyZ Dec 02 '20 at 19:45
  • 2
  • 1
    @EvgeniyZ А что такого, люди приходят из форм и пытаются делать то, что они делали раньше. Не по собственной тупости, а потому что вы еще не успели подсказать, что дальше делать. Я тоже по-началу финформил, а xaml казался чем-то сложным и неповоротливым, несмотря на то что я изо всех сил в него пытался вникнуть. И у меня даже получалось писать что-то вменяемое, хоть и не большое. А потом узнал про MVVM и за неделю все переписал. Ни кто не пострадал. А вы ругаетесь, не надо ругаться, если с ходу непонятно, что у человека в голове. Вот когда с первого раза не понял, тогда уже другой разговор. – aepot Dec 02 '20 at 20:33
  • 1
    @aepot Не поверите, а я сразу зашел в WPF и понял, что за интерфейс отвечает XAML, а за код C#, да, я обращался к контролам и не особо использовал привязки (textBox.Text="1"), да и конструктор использовал, что у меня все было с Margin = "900, 141, 515, 111", но я четко разграничивал UI и C#, это прям очивидные вещи. Я даже больше скажу, я тогда особо то и не знал что такое язык программирования. Да, может я такой "умный", но ведь если ввести в поисковике wpf, то увидим Одной из важных особенностей является использование языка декларативной разметки интерфейса XAML. – EvgeniyZ Dec 02 '20 at 20:44
  • 1
    @aepot А если еще чуть углубиться, то увидим и привязки и все остальное, прям первыми запросами. Я уверен, что если сейчас напишу Как динамически добавлять элементы, то я также увижу уйму примеров, которые говорят "привязки". Ок, не хотим искать... Но ведь создание UI через C# это сложно! Не уж то это не может насторожить? Я лично до сих пор вряд-ли смогу сделать через C# нормальный UI, красивый. Так что я с вами не очень прям уж в этом плане согласен, ибо тут скорей очередное создание лабораторной работы, где студенты делают на тяп ляп все, без желания разбираться. – EvgeniyZ Dec 02 '20 at 20:47
  • 1
    @EvgeniyZ вы говорите совершенно правильные вещи, но при этом показываете всем, что это вас раздражает. Это я вижу, что вы практически каждый день разным людям рассказываете одно и то же, иногда слово в слово. Вижу, что люди идут сюда писать прежде чем гуглить и читать. Это на мой взгляд тоже плохо. Я про другое - про то, что эмоции должны быть в стороне, я во всяком случае всегда стараюсь писать максимально нейтрально, хоть и не всегда получается. Уж простите. :) – aepot Dec 02 '20 at 20:52
  • @aepot "ругаться" - почему вы всегда думаете, что я ругаюсь? Знак ! (восклицания) не только ведь показывает, что это ругань, крик или еще что, а иногда и акцентирует внимание, что "так плохо!", "не делайте так!". Это не эмоции или что-либо еще, а лишь рассуждение и акцентирование внимания, ибо порой без этого знака контент не воспринимается, увы. Уж извините, если вам показалось это криком, руганью или еще чем. А по поводу людей, увы, но за 4 года, что я здесь, только единицы перешли на привязки, другим было лень, сложно, нет времени и так далее, хотя давал подробнейшие разборы их задач. – EvgeniyZ Dec 02 '20 at 20:59
  • 1
    Автор, я никогда никому не советовал, но можно пробежаться по моим ответам про WPF и по ответам @EvgeniyZ. Ссылки я сделал с фильтром WPF. Там много всяких разных, даже самых детальных примеров, которые не всегда можно найти через поиск. Даю гарантию, что поразбиравшись, вы решите свой вопрос, а так же научитесь делать новые крутые штуки. Ну и узнаете, что такое MVVM. Я бы может и на ваш вопрос написал ответ, но слишком мало данных. – aepot Dec 02 '20 at 21:09
  • Большое спасибо aepot и EvgeniyZ за ответы, наводки и критику. Буду разбираться. – Warden Dec 04 '20 at 08:46

0 Answers0