Добавить значения текстового поля в список в WPF

У меня есть две сцены (окна), основная и дополнительная. Во второй сцене у меня есть названиеtextbox и описаниеtextbox. Я хочу записать значения в эти два, а затем, если я нажму Создайтеbutton, я хочу, чтобы они сохранялись в списке (или что-то еще) и добавлялись как пункт в MainWindow Listview.
Когда я нажимаю пункт в списке, он должен отображать имя и описание в двух отдельных labels / textblocks ..

Я пробовал следующее ...

 public partial class SecondWindow : Window
    {
        List<string> nameList = new List<string>();
        List<string> contentList = new List<string>();
        public SecondWindow()
        {
            InitializeComponent();

        }

        public class MyItem
        {
            public string Titel { get; set; }

            public string Text { get; set; }
        }

        private void Button_SaveAndReturn(object sender, RoutedEventArgs e)
        {
            var nameInput = NameInput.Text;
            var textInput = TextInput.Text;
            MainWindow mainWindow = new MainWindow
            {
                DataContext = this
            };
            //Save information then close

            nameList.Add(nameInput);
            contentList.Add(textInput);

            mainWindow.listView.Items.Add(new MyItem { Titel=nameList.ToString(), Text=contentList.ToString() });

            this.Close();

        }

Я вообще на правильном пути или полностью заблудился?

создание нового MainWindow в SaveAndReturn (MainWindow mainWindow = new MainWindow) не имеет смысла. Вам следует работать с открытым экземпляром MainWindow.

ASh 14.05.2018 14:56

Здесь много странностей, но создание нового MainWindow определенно неверно. Замените это на var mainWindow = (MainWindow)Application.Current.MainWindow;.

Clemens 14.05.2018 14:56

У вас должен быть класс модели представления со свойством public ObservableCollection<MyItem> Items. Назначьте один экземпляр класса модели представления контексту данных обоих окон. В XAML MainWindow привяжите его, как <ListView ItemsSource = "{Binding Items}">, а во вторичном окне получите доступ к нему с помощью ((ViewModel)DataContext).Items.Add(new MyItem { ... })

Clemens 14.05.2018 15:00

Такое именование - плохая практика: var nameInput = NameInput.Text;. Лучше было бы называть строковую переменную name. Это не ввод, это строка. Вы создаете ненужную путаницу для себя и для функции автозаполнения VS. Представьте, что у вас и вашего брата одно и то же имя, но его имя начинается со строчной буквы «f».

15ee8f99-57ff-4f92-890c-b56153 14.05.2018 15:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
701
2

Ответы 2

Если я прочитал вас прямо здесь, вам нужно изменить эту строку:

mainWindow.listView.Items.Add(new MyItem { Title=nameList.ToString(), Text=contentList.ToString() });

к

mainWindow.listView.Items.Add(new MyItem { Title=nameInput, Text=textInput });

В противном случае вы пытаетесь добавить представление string для nameList и contentList

@Hubii Почему бы и нет? Это именно то, что вы написали.

Clemens 14.05.2018 15:32

@Clemens На самом деле, еще много всего, но главное, что он делает неправильно, - это цель публикации имени и ввода текста.

Billy 14.05.2018 15:49

@Billy IMO основная ошибка заключалась в создании нового экземпляра MainWindow вместо доступа к существующему.

Clemens 14.05.2018 15:56

Я хотел получить доступ к существующему окну. Чтобы получить доступ к списку.

FilipE92 14.05.2018 16:24

@Clemens Понятно, теперь я понял, ха-ха, спасибо, что поправили меня.

Billy 14.05.2018 16:40

Вам нужно сделать следующий код:

mainWindow.listView.Items.Add(new MyItem() { Title=nameInput, Text=textInput });

Нет, не надо этого делать. Вместо этого у вас должна быть общая модель представления для обоих окон.

Clemens 14.05.2018 15:31

Другие вопросы по теме