@Dant3lion

WPF Каким образом можно передать данные из СоmboBox одного окна в Label другого окна?

Есть окно в WPF, в котором в ComboBox выбирается значение. Можно ли каким-либо образом передать значение выбранного ComboBox в Label уже другого окна? И если возможно, могли бы показать на примере CBPat - ComboBox 1 окна и NamePat - Label 2 окна.
  • Вопрос задан
  • 1051 просмотр
Решения вопроса 1
AVollane
@AVollane
Начинающий C# разработчик
Здравствуйте. Думаю, простым и надёжным способом будет передача нужных данных через конструктор второго окна. Стандартно он создаётся без параметров, но мы можем дописать их туда. Написал код и снабдил его комментариями, думаю так будет проще разобраться.
Код XAML главного окна (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 второго окна (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# главного окна (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# второго окна (SecondWindow):
// Второе окно
    public partial class SecondWindow : Window
    {
        // Конструктор изменён соответсвенно для приём строки, или другого элемента,
        // необходимого вам
        public SecondWindow(string element)
        {
            InitializeComponent();

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


У меня всё получилось. Выбрал в комбобоксе нужный элемент, нажал на кнопку, открылось окно, а там на лейбле выбранный элемент.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@itgood
Смотри ты можешь сделать свойство куда будешь записывать данные с комбо бокса а в другом окне будет с этого свойства принимать данные , почитай про область видимости
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы