• WPF ComboBox Как вывести список значений второго ComboBox,чтобы он зависил от выбранного значения в первом ComboBox?

    @OwDafuq
    Нет информации о том, как делаете, поэтому скажу, как я делал используя MVVM:
    1) При изменении (SelectedItem) выбранного объекта в ComboBox вызывал асинхронный метод загрузки для второго ComboBox
    2) В асинхронном методе очищаем ObservableCollection, заполняем его новыми данными из БД/API/etc.

    Примерный код был такой:
    ViewModel:
    private ServerGroup selectedGroup;
    public ServerGroup SelectedGroup
    {
    	get => selectedGroup;
    	set
    	{
    		selectedGroup = value;
    		loadProcesses();
    	}
    }
    public ObservableCollection<ServerGroup> Groups { get; }
    public ObservableCollection<Process> Processes { get; }
    
    private async void loadProcesses()
    {
    	Processes.Clear();
    	//get response from API, etc.
    	var response = new List<Process>(); //example
    
    	response.ForEach(Processes.Add);
    }


    XAML(View):
    <ComboBox SelectedItem="{Binding SelectedGroup}" ItemsSource="{Binding Groups}"/>
    <ComboBox SelectedItem="{Binding ......}" ItemsSource="{Binding Processes}"/>
    Ответ написан
    Комментировать
  • WPF Каким образом можно передать данные из СоmboBox одного окна в Label другого окна?

    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;
            }
        }


    У меня всё получилось. Выбрал в комбобоксе нужный элемент, нажал на кнопку, открылось окно, а там на лейбле выбранный элемент.
    Ответ написан
    2 комментария
  • Как привязать (обращение) значений БД к ComboBox?

    @cicatrix
    было бы большой ошибкой думать
    А что не работает-то?
    WPF идеологически создан для паттерна MVVM. Согласно нему, у вьюхи вашей (окна) должна быть модель (viewModel), где содержится коллекция элементов, к которой можно привязать ComboBox.
    Да, список лучше оборачивать в ObservableCollection, а не в List, либо надо ручками уведомлять вьюху об изменении содержимого списка.
    Ответ написан
    9 комментариев
  • Как разместить элементы по относительной позиции?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Для такой раскладки лучше всего подходят гриды https://jsfiddle.net/e780f9md/

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

    P.S.
    <meta http-equiv="Content-Type" content="text/html; charset="UTF-8">

    Это устаревшая запись, сейчас используется короткая: <meta charset="UTF-8">

    <style type="text/css"> - аналогично. Сейчас не нужно указание типа для тега style.

    Если вы смотрели курсы, в которых показывали такой код, то они устарели по крайней мере лет на 5, а то и больше.
    Ответ написан
    1 комментарий