1

我确定我已经在 StackOverflow 上找到了这个,但我似乎不够聪明,无法再次找到它

我想要做的是(在 WPF 中使用 MVVM)是这样的:

cmbSelectedAddressRegion: populated with the list of region
cmbSelectedAddressCities: populated with the list of cities in that region

当用户点击某个地区时cmbSelectedAddressRegion,items 中的cmbSelectedAddressCities应该只有该地区的城市

我有这样的 XAML

    <ComboBox Name="cmbSelectedAddressRegion" 
SelectedValue="{Binding Path=selectedAddressItemRegion, UpdateSourceTrigger=PropertyChanged}" 
IsEnabled="{Binding Path=selectedAddressIsEnabled}" 
Style="{StaticResource style_flat_ComboBox}"></ComboBox>

    <ComboBox Name="cmbSelectedAddressCities" 
SelectedValue="{Binding Path=selectedAddressIdCities, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="id" 
SelectedValuePath="id" 
ItemsSource="{Binding ElementName=cmbSelectedAddressRegion, Path=SelectedItem.Cities}" IsEnabled="{Binding Path=selectedAddressIsEnabled}" 
Style="{StaticResource style_flat_ComboBox}"></ComboBox>

当我单击 cmbSelectedAddressRegion 中的一个区域时, cmbSelectedAddressCities 已正确填充

我还有一个vmCustomer带有很多DependencyProperties(其中selectedAddressItemRegionselectedAddressIdCities)的虚拟机当我从主列表中选择客户(窗口中另一个包含客户列表的组合框)时,我看到cmbSelectedAddressRegion正确显示区域,但我没有看到中的任何东西cmbSelectedAddressCities。再次,如果我单击cmbSelectedAddressRegioncmbSelectedAddressCities填充并选择当前选定的城市(在 中vmCustomer

cmbSelectedAddressRegion.itemssource界(在文件后面的 bode 中)到一个ObservableCollection(of vmAddressRegion) EachvmAddressRegion有,在其他 DependencyProperties 中,一个cities属性返回一个ObservableCollection(of vmAddressCities)

ObservableCollection(of vmAddressRegion)创建窗口时填充。同时,对于ObservableCollection(of vmAddressRegion)(类型vmAddressRegion)的每个项目,ObservableCollection(of vmAddressCities)都填充了相应的项目)

我希望我已经足够清楚了任何建议如何解决上述问题(cmbSelectedAddressCities没有被“填充”)?

谢谢你的帮助

4

2 回答 2

0

很抱歉耽搁了这么久。

我知道我承诺在本周末发回我的解决方案,但我的电脑决定第二天就死机了。关于我原来的问题,我采用了 2 个“解决方案”。首先,我删除了数字 ID,将其更改为地区/城市的完整描述。我认为这很好,但是对于一些“奇怪”的情况(例如第一次单击区域组合框时)仍然存在问题。在代码中挖掘了一段时间后,我发现真正的问题出在我为应用程序。在转换过程中,我犯了一个错误:我写了“if isnothing”而不是“ if not isnothing ”,结果是一个无转换为空格,搞乱了整个父子关系。正如我担心的那样,问题是在我的代码中,

再次感谢大家,再次为延误道歉

于 2013-02-04T10:04:24.947 回答
0

WPF ComboBox 需要小心处理。如果 ItemsSource 和 SelectedValue/SelectedItem 以“错误”的顺序更改,绑定很容易混淆,尤其是在您使用 SelectedValue 时。

我的建议是用“SelectedItem”替换“SelectedValue”绑定。绑定表达式可以保持不变(尽管我认为您不需要指定 UpdateSourceTrigger)。

绑定到 SelectedItem 意味着您的vmCustomer需要selectedAddressCity属性而不是 selectedAddressIdCity id(并且您可以删除 cmbSelectedAddressCities 的 SelectedValuePath)。

于 2012-12-20T00:46:41.813 回答