У меня есть две сцены (окна), основная и дополнительная.
Во второй сцене у меня есть название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 определенно неверно. Замените это на var mainWindow = (MainWindow)Application.Current.MainWindow;.
У вас должен быть класс модели представления со свойством public ObservableCollection<MyItem> Items. Назначьте один экземпляр класса модели представления контексту данных обоих окон. В XAML MainWindow привяжите его, как <ListView ItemsSource = "{Binding Items}">, а во вторичном окне получите доступ к нему с помощью ((ViewModel)DataContext).Items.Add(new MyItem { ... })
Такое именование - плохая практика: var nameInput = NameInput.Text;. Лучше было бы называть строковую переменную name. Это не ввод, это строка. Вы создаете ненужную путаницу для себя и для функции автозаполнения VS. Представьте, что у вас и вашего брата одно и то же имя, но его имя начинается со строчной буквы «f».





Если я прочитал вас прямо здесь, вам нужно изменить эту строку:
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 На самом деле, еще много всего, но главное, что он делает неправильно, - это цель публикации имени и ввода текста.
@Billy IMO основная ошибка заключалась в создании нового экземпляра MainWindow вместо доступа к существующему.
Я хотел получить доступ к существующему окну. Чтобы получить доступ к списку.
@Clemens Понятно, теперь я понял, ха-ха, спасибо, что поправили меня.
Вам нужно сделать следующий код:
mainWindow.listView.Items.Add(new MyItem() { Title=nameInput, Text=textInput });
Нет, не надо этого делать. Вместо этого у вас должна быть общая модель представления для обоих окон.
создание нового MainWindow в SaveAndReturn (
MainWindow mainWindow = new MainWindow) не имеет смысла. Вам следует работать с открытым экземпляром MainWindow.