0

Есть 2 класса, первый Job хранит в себе список второго JobTitle

Задача в том чтобы при нажатии на элемент списка Job в втором списке выводилось содержимое его подсписка JobTitle.

Как в коде это реализовать не очень понимаю

введите сюда описание изображения XAML

</Grid.ColumnDefinitions>
        <DataGrid x:Name="Jobs" Grid.Column="0" AutoGenerateColumns="False" ItemsSource="{Binding Path = Jobs}">
            <DataGrid.Columns >
                <DataGridTextColumn Binding="{Binding Path = Name}" Header="Job" Width="200*"  IsReadOnly="False"></DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
    &lt;DataGrid x:Name=&quot;dgJobTitle&quot; Grid.Column=&quot;1&quot; AutoGenerateColumns=&quot;False&quot; ItemsSource=&quot;{Binding Path = Jobs}&quot;&gt;
        &lt;DataGrid.Columns &gt;
            &lt;DataGridTextColumn Header=&quot;JobTitle&quot; Width=&quot;200*&quot; IsReadOnly=&quot;False&quot;  Binding=&quot;{Binding Path = _Jobs}&quot;&gt;
            &lt;/DataGridTextColumn&gt;
        &lt;/DataGrid.Columns&gt;
    &lt;/DataGrid&gt;

ViewModel

class MainViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged([CallerMemberName] string prop = "")
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(prop));
        }
    private List&lt;Job&gt; _jobs;
    public List&lt;Job&gt; Jobs
    {
        get { return _jobs; }
        set
        {
            _jobs = value;
            OnPropertyChanged(&quot;Jobs&quot;);
        }
    }
    public MainViewModel() 
    {

        Jobs = new List&lt;Job&gt;();

    }
}

Классы

class Job : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged([CallerMemberName] string prop = "")
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(prop));
        }
        public string Name
        {
            get { return name; }
            set
            {
                name = value;
                OnPropertyChanged("Name");
            }
        }
       private string name;
}

internal class JobTitle : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged([CallerMemberName] string prop = "") { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(prop)); }

    string name; 
    public string Name
    {
        get { return name; }
        set
        {
            name = value;
            OnPropertyChanged(&quot;Name&quot;);
        }
    }

    public List&lt;Item&gt; items;
}

gil9red
  • 77,085
  • ComboBox добавьте в ваше View и туда забиндите нужный список из JobTitle. В итоге при изменении выбранного элемента Job будет и меняться ComboBox.Items – Aarnihauta Jul 22 '22 at 08:32
  • нет мне не подходит ComboBox так как в планах возможность редактировать его тоже прикреплю изображение окна – Jostario Jul 22 '22 at 09:08
  • У Combobox есть свойство IsEditable, указываете IsEditable = True и никаких проблем. – Aarnihauta Jul 22 '22 at 09:24
  • 2
    Синхронизация вам в помощь. – EvgeniyZ Jul 22 '22 at 09:47
  • Спасибо но все же я не понимаю как мне работать с коллекции внутри коллекции можно пример пожалуйста ? – Jostario Jul 22 '22 at 11:40
  • 1
    Эм, там прям полноценный код с подробным описанием что да как делать. Не ленитесь! – EvgeniyZ Jul 22 '22 at 11:48
  • Я не ленюсь. просто я действительно не могу понять как написать в XAML Binding коллекции которая в другой коллекции. Хоть может это и полная глупость с моей стороны. @EvgeniyZ – Jostario Jul 22 '22 at 15:59
  • А как еще назвать, если вы не видите решения по ссылке выше? Ок, давайте тыкну носом: Читаем с Все элементы мы привязываем как обычно, но только с указанием еще имени нашей коллекции. – EvgeniyZ Jul 22 '22 at 16:01
  • @EvgeniyZ Спасибо вам за помощь, но этот абзац я читал тоже внимательно, я просто совершил небольшую ошибку которую не мог найти. Ваш ответ очень помог. – Jostario Jul 22 '22 at 16:25
  • Если совершаете ошибку, то и давайте нам эту ошибку, показывайте код как пробовали, а то "не понимаю". Вот встаньте, например на мое место, вы даете человеку ссылку, где черным по белому написано решение, прям дословно и по пунктам разбирается, а в ответ вы видите "Не понимаю, дайте мне код". Как вы на это отреагируете? Думаю, как и я, подумаете, что человек лениться даже прочитать то, что ему дают, а хочет лишь готовое, чтоб решили все за него. Поэтому на будущее не "не понимаю", а конкретно пишите, что и как делали, и что не получается. – EvgeniyZ Jul 22 '22 at 16:30
  • да собственно не правильно прописал Binding второй колонки
    <DataGrid x:Name="dgJobTitle" ItemsSource="{Binding Path = Jobs}" > <DataGridTextColumn Header="JobTitle" Binding="{Binding Path = JobsTitle/Name}"> от этого были вылеты. заменил на: ItemsSource="{Binding Path = Jobs/JobsTitle}" Binding="{Binding Path = Name}
    – Jostario Jul 22 '22 at 16:41

0 Answers0