2010-12-12 18 views
1

私は驚いた問題に遭遇しました。(WPF MVVM ComboBox SelectedItem or SelectedValue not workingの場合を除き)議論が見つかりませんでした。Items Selected Items as Itemsソースのバインディングが完了していません

MVVMフォームは2つあり、1つは「新規アイテム作成」用、もう1つは「アイテム変更用」です。アイテムのプロパティの1つを表すコンボボックスがあります。

変更ctorでは、ItemsSourceにバインドされたプロパティが初期化され、SelectedItemにバインドされたプロパティが設定されます。しかし、SelectedItemセットを(たとえ小さなビットでも)遅延させない限り、UIでは何も選択されません。

どうすればこの問題を解決できますか?私はちゃんと問題を解決するために、完全にランダムな間隔でタイマーを維持することはできません:D

はあなたの助け

+0

SelectedIndexを試すことができますか?それは過去に私のために働いた。 – Kugel

+0

あなたの提案に従ってこれを試しましたが、問題はまったく同じです。ちょっと遅れてしまった場合、UIのselectedItemにしか影響しません。 –

答えて

0

をありがとう私が設定する前のItemsSourceが初期化されていることを確認するためにエレガントな方法のように思えますVMからのSelectedItemは、ビューリソースで宣言されているItemsSourceのバインディングソースを持ちます。 私はそれを指摘したので、誰かが私を光に導くことができると確信しています。

私はCollectionViewSourceを試しましたが、MVVMパターンを破棄することなくフィルタ機能を使用する方法を見つけられませんでした。私はICollectionView.Filter(フィルタリングされた項目は別のコンボボックスの選択に依存していますが、本当に奇妙なことはありません)と同じように、フィルタを再作成する方法もわかりません。

おそらく、ビューで宣言され、ItemsSourceとして使用されているリソースは、必ずしもCVSである必要はありません。私はここで提案を探しています。

--Edit-- IsSynchronizedWithCurrentItem = "真"のソリューションがWeb上に広がっていることが実際にはわかっています。私はそれが私のコントロールでもう使用されていない残りのSelectedValuePathのために最初に試してみたときに私の問題を解決しなかったので、誤解を招きました。

0
public MyViewModel() 
{ 
    this.Items = ...; 
    //this.SelectedItem = ...; 

    // select in separate message so that the ItemsSource has definitely been set 
    this.Dispatcher.BeginInvoke(delegate 
    { 
     this.SelectedItem = ...; 
    }); 
} 
+0

それは私にとってはうまくいかない。あなたはそれを似たような場合に取り組んだことがありますか? –