D
D
Dant3lion2021-05-27 19:07:48
WPF
Dant3lion, 2021-05-27 19:07:48

WPF How can I pass data from the ComboBox of one window to the Label of another window?

There is a window in WPF in which a value is selected in a ComboBox. Is there any way to pass the value of the selected ComboBox to the Label of another window? And if possible, could show the example of CBPat - ComboBox 1 windows and NamePat - Label 2 windows.

Answer the question

In order to leave comments, you need to log in

2 answer(s)
A
Anton Baryshev, 2021-05-28
@Dant3lion

Hello. I think a simple and reliable way would be to pass the necessary data through the constructor of the second window. By default, it is created without parameters, but we can add them there. I wrote the code and provided it with comments, I think it will be easier to understand.
XAML code of the main window (MainWindow):

<Window x:Class="ComboBoxResultToAnotherWindow.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ComboBoxResultToAnotherWindow"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <StackPanel>
        <ComboBox Name="cbPat" Margin="100" Height="30"/>
        <Button Name="openSecondWindowButton" Width="100" Height="40" Content="Second Window" Click="OpenSecondWindowButton_Click"/>
    </StackPanel>
</Window>

XAML code of the second window (SecondWindow):
<Window x:Class="ComboBoxResultToAnotherWindow.SecondWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ComboBoxResultToAnotherWindow"
        mc:Ignorable="d"
        Title="SecondWindow" Height="450" Width="800">
    <Grid>
        <Label Name="labelWindow2"></Label>
    </Grid>
</Window>

C# code of the main window (MainWindow):
// Основное окно
    public partial class MainWindow : Window
    {
        // Тестовый список элементов, здесь я взял строки, но вы можете взять другой источник данных
        // и другой тип данных. Можете изменить способ их получение, вобщем как сами посчитаете необходимым
        List<string> elements = new List<string>() { "first", "second", "third" };

        // Конструктор основного окна
        public MainWindow()
        {
            InitializeComponent();

            // Привязываем элементы к комбобоксу
            cbPat.ItemsSource = elements;
        }

        // Обработчик события нажатия на кнопку
        private void OpenSecondWindowButton_Click(object sender, RoutedEventArgs e)
        {
            // Создаём объект, представляющий второе окно с лэйблом, на котором будем отображать данные
            // В конструктор передаём выбранный в комбобоксе элемент (мы изменили конструктор второго окна,
            // соответствующим способом). Данные преобразованы к нужному типу.
            SecondWindow secondWindow = new SecondWindow((string)cbPat.SelectedItem);

            // Показываем окно
            secondWindow.Show();
        }
    }

C# code for the second window (SecondWindow):
// Второе окно
    public partial class SecondWindow : Window
    {
        // Конструктор изменён соответсвенно для приём строки, или другого элемента,
        // необходимого вам
        public SecondWindow(string element)
        {
            InitializeComponent();

            // Устанавливаем содержимое лейбла элементов, полученным в качестве аргумента
            labelWindow2.Content = element;
        }
    }

I got it all. I selected the necessary element in the combobox, pressed the button, a window opened, and there the selected element is on the label.

I
itgood, 2021-05-28
@itgood

Look, you can make a property where you will write data from the combo box and in another window it will receive data from this property, read about the scope

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question