我在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-”)
预先感谢您的建议!
答案 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>