1

私はこれを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また、多くのVM があります(DependencyPropertiesそれらの中でselectedAddressItemRegionselectedAddressIdCities)cmbSelectedAddressRegionの何かcmbSelectedAddressCities。もう一度クリックするとcmbSelectedAddressRegioncmbSelectedAddressCitiesデータが入力され、現在選択されている都市 ( 内vmCustomer) が選択されます。

cmbSelectedAddressRegion.itemssource(ファイルの背後にあるボードで) にバインドされてObservableCollection(of vmAddressRegion)vmAddressRegionますcitiesObservableCollection(of vmAddressCities)

ウィンドウのObservableCollection(of vmAddressRegion)作成時にデータが取り込まれます。同時に、ObservableCollection(of vmAddressRegion)(タイプ のvmAddressRegion) のすべてのアイテムに対してObservableCollection(of vmAddressCities)、 に対応するアイテムが入力されます)

上記の問題(cmbSelectedAddressCities「入力されていない」)を解決する方法について何か提案はありますか?

助けてくれてありがとう

4

2 に答える 2

0

長い遅れでごめんなさい。

私は週末に解決策を投稿することを約束したことを知っていますが、私のPCは翌日死ぬことにしました。私の元々の問題に関して、私は2つの「解決策」を採用しました。まず、数値IDを削除して、Region/Cityの完全な説明に変更しました。これは良いことだと思いましたが、問題はいくつかの「奇妙な」ケースで残っていました(たとえば、Regionコンボボックスを初めてクリックしたとき。コードをしばらく掘り下げた後、本当の問題は私が書いたコンバーターにあることがわかりました。アプリケーション。変換中に私は間違いを犯しました:「ifisnothing」の代わりに「ifnot isnothing と書いた結果、何もスペースに変換されず、父子関係全体が台無しになりました。心配していたので、問題は私のコードでは、

皆さん、ありがとうございました。また、遅れて申し訳ありません。

于 2013-02-04T10:04:24.947 に答える
0

WPF ComboBox は注意して取り扱う必要があります。特に SelectedValue を使用する場合、ItemsSource と SelectedValue/SelectedItem が「間違った」順序で変更されると、バインドは簡単に混乱します。

私のアドバイスは、「SelectedValue」バインディングを「SelectedItem」に置き換えることです。バインディング式は同じままでかまいません (ただし、UpdateSourceTrigger を指定する必要はないと思います)。

SelectedItem へのバインディングは、vmCustomer が selectedAddressIdCity id の代わりに selectedAddressCity プロパティを必要とすることを意味します(また、cmbSelectedAddressCities の SelectedValuePath を削除できます)

于 2012-12-20T00:46:41.813 に答える