我确定我已经在StackOverflow上找到了这个,但我似乎不够聪明才能再找到它
我想做的事(在使用MVVM的WPF中)是这样的:
cmbSelectedAddressRegion: populated with the list of region
cmbSelectedAddressCities: populated with the list of cities in that region
当用户点击cmbSelectedAddressRegion
中的某个区域时,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
(其中包括selectedAddressItemRegion
和selectedAddressIdCities
)
当我从主列表中选择客户时(窗口中包含客户列表的另一个组合框)我看到cmbSelectedAddressRegion
正确显示了区域,但我在cmbSelectedAddressCities
中没有看到任何内容。如果我点击cmbSelectedAddressRegion
再次填充cmbSelectedAddressCities
并选择当前选定的城市(vmCustomer
)
cmbSelectedAddressRegion.itemssource
被绑定(在文件后面的bode中)到ObservableCollection(of vmAddressRegion)
除了其他DependencyProperties之外,每个vmAddressRegion
都有一个cities
属性,它返回ObservableCollection(of vmAddressCities)
创建窗口时会填充ObservableCollection(of vmAddressRegion)
。同时,对于ObservableCollection(of vmAddressRegion)
(类型为vmAddressRegion
)的每个项目,ObservableCollection(of vmAddressCities)
都会填充相应的项目)
我希望我已经足够清楚了
有任何建议如何解决上述问题(cmbSelectedAddressCities
没有“填充”)?
感谢您的帮助
答案 0 :(得分:0)
需要小心处理WPF ComboBox。如果ItemsSource和SelectedValue / SelectedItem以“错误”顺序更改,则绑定很容易混淆,特别是如果您使用SelectedValue。
我的建议是用“SelectedItem”替换“SelectedValue”绑定。绑定表达式可以保持不变(尽管我认为您不需要指定UpdateSourceTrigger)。
绑定到SelectedItem意味着 vmCustomer 需要 selectedAddressCity 属性而不是selectedAddressIdCity id(并且您可以删除cmbSelectedAddressCities的SelectedValuePath)。
答案 1 :(得分:0)
很抱歉长时间拖延。
我知道我答应在本周结束时回复我的解决方案,但我的电脑决定第二天就死了。 关于我原来的问题,我采用了2个“解决方案”。 首先,我删除了数字ID,将其更改为Region / City的完整描述。我认为这很好,但问题仍然存在于一些“奇怪”的情况下(例如,当第一次点击Region组合框时。 在代码中挖了一段时间后,我发现真正的问题出在我为应用程序编写的转换器中。在转换过程中,我犯了一个错误:而不是“ if isnothing ”我写了“ if not isnnothing ”,结果却没有转化为太空,弄乱了整个父亲 - 孩子的关系。 我担心的是,问题出在我的代码中,而不是我在这里发布的代码中。
我再次感谢大家,并再次为延迟道歉