Установить 3 разных "observableCollection" в другой? - PullRequest
1 голос
/ 19 апреля 2019

Я работаю в MVVM и обнаруживаю этот паттерн.

Что я хочу сделать:

2 комбинированных списка: Если в выпадающем списке 1 отображается A, я хочу, чтобы в выпадающем списке 2 отображался список «observableCollectionA». Если в поле со списком 1 отображается B, я хочу, чтобы в поле со списком 2 отображалось «observableCollectionB» Если в комбинированном окне 1 отображается C, я хочу, чтобы в комбинированном окне 2 отображалось «observableCollectionC»

Я закончил структуру, она работает со списком, теперь я должен преуспеть с объектами;

Вот код, который принимает выбранное значение «SelectedValue» в выпадающем списке и отправляет его для отображения результата. Вот где я хочу сравнить значение в моем комбинированном списке (пример: «Компания») и сравнить его, чтобы получить список моей компании и отобразить его во втором комбинированном списке:

    private string _SelectedListValue;
    public string SelectedListValue
    {
        get
        {
            return _SelectedListValue;
        }
        set
        {
            if (value != _SelectedListValue)
            {
                _SelectedListValue = value;
                RaisePropertyChanged(nameof(SelectedListValue));
                ResultList = new ObservableCollection<string>();

                if (value == "Company")
                {
                    _ResultList.Add("Hello"); //Test, it works
                    _ResultList = Company; 
                }
                else if(value == "Services")
                {
                    _ResultList.Add("Not Hello");//test, it Works
                    _ResultList = Services;
                }
            }
        }
    }

А для второго комбинированного списка:

    private ObservableCollection<string> _ResultList;
    public ObservableCollection<string> ResultList
    {
        get
        {
            return _ResultList;
        }
        set
        {
            if (value != _ResultList)
            {
                _ResultList = value;
                RaisePropertyChanged(nameof(ResultList));
            }
        }
    }

Вот мои данные:

        Company = new ObservableCollection<Company>((await _dataService.GetCompany().ConfigureAwait(false)));
        Services = await _dataService.GetServicesAsync(true).ConfigureAwait(false);
        Sections = await _dataService.GetSectionsAsync(_dataService.ParamGlobaux.IDCompany).ConfigureAwait(false);

Что бы я хотел, чтобы в соответствии с моим условием, если значение «SelectedListValue» было «Company», то «_ResultList» загружает ObservableCollection-Company-

Надеюсь, я был ясен, я не знаю, какое лучшее решение, и я действительно хотел бы закончить это до этих выходных ахах

РЕДАКТИРОВАТЬ: (тип данных "Services" - "ObservableCollection-Services-", а компания - "ObservableCollection-Company -")

Заранее спасибо за совет!

1 Ответ

1 голос
/ 19 апреля 2019

вы можете использовать DataTrigger, чтобы установить право ItemsSource при выборе cmb1, если Cmb1SelectedItem изменил свое изменение, то в источнике Cmb2 нет необходимости поддерживать в VM

     <ComboBox Name="Cmb1" ItemsSource="{Binding Cmb1List}" SelectedItem="{Binding Cmb1SelectedItem}">

            </ComboBox>

            <ComboBox Name="Cmb2"  >
                <ComboBox.Style>
                    <Style TargetType="{x:Type ComboBox}">
 <Setter Property="ItemsSource" Value="{Binding ObservableCollectionC}"></Setter>
                        <Style.Triggers>
    <DataTrigger Binding="{Binding Cmb1SelectedItem}" Value="A">
                                <Setter Property="ItemsSource" Value="{Binding ObservableCollectionA}"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Cmb1SelectedItem}" Value="B">
                                <Setter Property="ItemsSource" Value="{Binding ObservableCollectionB}"></Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </ComboBox.Style>
            </ComboBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...