Member 14647867 Ответов: 1

Передача данных из окна WPF в Главное окно


Привет,

У меня есть DataGrid в моем MainWindow.xaml, который имеет различные столбцы. У меня есть еще одно окно "AddFixtures.xaml", в котором есть загрузка текстовых полей, я хочу, чтобы данные из текстовых полей в этом окне переходили в строки в datagrid в MainWindow.xaml.

Что я уже пробовал:

У меня есть класс для Fixture в коде позади 'AddFixture.xaml:

public class Fixture
        {
            public int fixtureID { get; set; }
            public int channelID { get; set; }
            public string fixtureName { get; set; }
            public string position { get; set; }
            public string patch { get; set; }
            public string mode { get; set; }
            public string power { get; set; }
            public string direction { get; set; }
        }


а затем я получаю все данные из различных текстовых полей, когда нажимаю кнопку "ОК":

private void BtnAddFixture_Click(object sender, RoutedEventArgs e)
        {
            var data = new Fixture {
                fixtureID = Int32.Parse(txtFixtureID.Text),
                channelID = Int32.Parse(txtChannel.Text),
                fixtureName = cbxFixture.Text,
                position = cbxPosition.Text,
                patch = cbxUniverse.Text + "." + txtChannel.Text,
                mode = cbxMode.Text,
                power = cbxSocca.Text + "." + cbxWay.Text,
                direction = "Forwards"
            };

        }


Поэтому мне буквально просто нужно получить var 'data' в мое 'MainWindow', чтобы добавить строки.

Я привязал класс к своим столбцам datagrid следующим образом:

<DataGrid x:Name="FixtureView"  AutoGenerateColumns="True" Grid.Column="1">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding fixtureID}" Header="Fixture ID" Width="*"/>
                    <DataGridTextColumn Binding="{Binding channelID}" Header="Channel ID" Width="*"/>
                    <DataGridTextColumn Binding="{Binding fixtureName}" Header="Name" Width="3.5*"/>
                    <DataGridTextColumn Binding="{Binding position}" Header="Position" Width="2*"/>
                    <DataGridTextColumn Binding="{Binding patch}" Header="Patch" Width="*"/>
                    <DataGridTextColumn Binding="{Binding mode}" Header="Mode" Width="1.5*"/>
                    <DataGridTextColumn Binding="{Binding power}" Header="Power" Width="*"/>
                    <DataGridTextColumn Binding="{Binding direction}" Header="Orientation" Width="2*"/>
                </DataGrid.Columns>
            </DataGrid>


Было бы очень здорово, если бы кто-нибудь мог сказать мне, что мне нужно делать, я искал уже несколько часов!

1 Ответов

Рейтинг:
1

RickZeeland

Возможно, вы ищете ObservableCollection, смотрите пример здесь: Обновление WPF DataGrid с привязкой к коллекции ObservableCollection[^]

Также смотрите ответы здесь: WPF передача данных между окнами[^]

Также видеть: Использование DataContext - Полное руководство по WPF[^]

Вот еще один пример: c# - привязка свойства из класса непосредственно к XAML - переполнение стека[^]
Обратите внимание на использование пространства имен:

<Window xmlns:da="clr-namespace:WPFTestBinding.DataAccess">


Member 14647867

Немного запутался, так как ответ там на самом деле не объясняет, что мне нужно добавить. Мне просто нужен способ передачи данных в мое главное окно. Я уже делал это раньше думаю с набором данных но не могу вспомнить как

Maciej Los

Если вы хотите отобразить коллекцию светильников в главном окне, вам нужно создать список светильников, а затем создать представление для этой коллекции. В окне "AddFixtures" вы должны предоставить возможность добавить приспособление в коллекцию приспособлений. Это все.

Member 14647867

У меня есть кнопка в "AddFixtures", которая получает все данные из текстовых полей и назначает их в качестве класса Fixture.

Maciej Los

Ну и что? Переменная 'data' создается локально и никогда не используется...
Там должны быть "связи" между модели (приспособление) - вид (язык XAML) - модель представления (приспособление зрения) в шаблоне MVVM. Подумай об этом!
Пожалуйста, обратитесь к этому: Как создать и привязать к ObservableCollection | Microsoft Docs[^]

Member 14647867

Да, в настоящее время он создает переменную данных, но тогда я понятия не имею, как получить ее в Главное окно. Это мой вопрос...

Member 14647867

Так что в настоящее время он никогда не используется

Member 14647867

Ни одно из решений не работает для меня в первой ссылке, я попробовал второе, и когда я изменил "Window1" на "MainWindow", я получил ошибки