0

Вот такая картина

   public class Config
    {
        public String Key { get; set; }
    public String ValueConfig { get; set; }
}


public class ConfigTemplates : INotifyPropertyChanged
    {
        private String title;
        private List<Config> configs;

        public String Title
        {
            get => title;
            set
            {
                title = value;
                OnPropertyChanged(nameof(Title));
            }
        }

        public List<Config> Configs
        {
            get => configs;
            set
            {
                configs = value;
                OnPropertyChanged(nameof(Configs));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

     public sealed class ApplicationViewModelContext : INotifyPropertyChanged
        {
            private ConfigTemplates selectedConfig;

            public ObservableCollection<ConfigTemplates> Configs { get; set; }

            public ConfigTemplates SelectedConfig
            {
                get => selectedConfig;
                set
                {
                    selectedConfig = value;
                    OnPropertyChanged(nameof(SelectedConfig));
                }
            }            

            public ApplicationViewModelContext()
            {                   

                Configs = new ObservableCollection<ConfigTemplates>()
                {
                    new ConfigTemplates()
                    {
                        Title = "XXX",

                        Configs = new List<Config>()
                        {
                            new Config {Key = $"1", ValueConfig = $@"XXX1"},
                            new Config {Key = $"2", ValueConfig = $@"XXX2"},
                            new Config {Key = $"3", ValueConfig = $@"XXX3"}
                        }
                    }
                };
            }

            public event PropertyChangedEventHandler PropertyChanged;

            [NotifyPropertyChangedInvocator]
            private void OnPropertyChanged([CallerMemberName] string propertyName = null)
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
        }


        <Grid>
                 <Grid.ColumnDefinitions>
                     <ColumnDefinition Width="0.5*"/>
                     <ColumnDefinition Width="*"/>
                 </Grid.ColumnDefinitions>   

                <ListBox Grid.Column="0" ItemsSource="{Binding Configs}" SelectedItem="{Binding SelectedConfig}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Margin="5">
                            <TextBlock FontSize="18" Text="{Binding Path=Title}"/>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
                </ListBox>

                <StackPanel Grid.Column="1" DataContext="{Binding SelectedConfig}">
                    <TextBlock Text="Selected Settings"/>
                    <TextBlock Text="Title"/>
                    <TextBox Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}"/>

                    <-- НЕ работает --!>
                    <ListBox ItemsSource="{Binding Configs, UpdateSourceTrigger=PropertyChanged}"/>

                </StackPanel>

            </Grid>

как можно вывести данные Configs

                    <ListBox ItemsSource="{Binding Configs, UpdateSourceTrigger=PropertyChanged}"/>

То есть, слева отображается Title, при нажатии на него, справа должны отобразится данные из Configs . Работает, Title отображается, но Configs отображаются не правильно.Как можно вывести Key = $"1", ValueConfig = $@"XXX1"

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

EugeneTM
  • 601
  • Очень странный у вас какой то код. В нем у вас свойство Title, содержащий просто строку, а Configs это некий список несвязанных с Title объектов. Как вы их связывать собираетесь я не пойму. Ну либо вы нам не пойми что скинули, ибо судя по XAML вы привязываетесь к одному списку - Confings. По поводу "Не правильно отображается" - а шаблон задать объекту? Вот у вас два ListBox, в первом вы переопределили шаблон, выведя Title, а у второго кто будет? – EvgeniyZ Jul 25 '20 at 09:37
  • @EvgeniyZ Есть связь, класс ConfigTemplates содержит свойство Title и Configs. Соединяю я их через ObservableCollection<ConfigTemplates> Configs то есть Configs уже имеет и Title у которого есть список Configs. по сути мне нужно сделать что то типо этого foreach (var config in Configs) { Console.WriteLine($"{config.Title}"); foreach (var configConfig in config.Configs) { Console.WriteLine($"{configConfig.Key} - {configConfig.ValueConfig}"); } } но в XAML – EugeneTM Jul 25 '20 at 09:52
  • Ну тогда вам либо это, либо через SelectedItem выводить. – EvgeniyZ Jul 25 '20 at 09:53
  • @EvgeniyZ Да, такой способ я пробовал и он работает, но проблема в том что у одного Title-а может быть несколько разных Key и ValueConfig. На счёт SelectedItem попробую! Спасибо! – EugeneTM Jul 25 '20 at 10:01
  • 1
    Вы не дали данные с которыми мы можем работать, как вы предлагаете нам тогда помочь вам? Сейчас вот узнается, что один Title имеет разные значения и где это в вопросе? Где там вообще что либо похожее на "правду"? Пожалуйста, отредактируйте вопрос, добавив в него все необходимое! По поводу "несколько значений" - делайте фильтр, самый лучший вариант. Ну либо да, SelectedItem, если оно изменилось, то формируете новую коллекцию, найдя все, к чему относится Title (аля Items = Configs.Where(x=>x.Title == Selected.Title);. – EvgeniyZ Jul 25 '20 at 10:08
  • @EvgeniyZ Вот данные, вроде понятно `new ConfigTemplates() { Title = "XXX",
                            Configs = new List<Config>()
                            {
                                new Config {Key = $"1", ValueConfig = $@"XXX1"},
                                new Config {Key = $"2", ValueConfig = $@"XXX2"},
                                new Config {Key = $"3", ValueConfig = $@"XXX3"}
                            }
                        }` за фильтр огромное спасибо, должно подойти!
    
    – EugeneTM Jul 25 '20 at 10:30

0 Answers0