在另一个中设置3个不同的“ observableCollection”吗?

时间:2019-04-19 13:50:39

标签: c# wpf mvvm combobox

我在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-

我希望我很清楚,我不知道最好的解决方案是什么,我真的很想在这个周末之前完成这项工作

编辑:(“服务”数据类型为“ ObservableCollection-Services-”,公司为“ ObservableCollection-Company-”)

预先感谢您的建议!

1 个答案:

答案 0 :(得分:1)

如果DataTrigger更改了其更改,则Cmb2项源无需在VM中维护,您可以使用ItemsSource为cmb1的选择设置正确的Cmb1SelectedItem

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