2010-12-12 61 views
1

我遇到了一個問題,我很驚訝,我找不到任何有關的討論(除WPF MVVM ComboBox SelectedItem or SelectedValue not working也許)。將SelectedItem綁定爲ItemsSource的綁定未完成

我有一個MVVM窗體,有2 ctors,一個是「新項目創建」,另一個是「項目修改」。我有一個組合框表示該項目的一個屬性。

在修改ctor中,綁定到ItemsSource的屬性被初始化,然後綁定到SelectedItem的屬性被設置。但是在用戶界面中沒有選擇任何內容,除非我延遲(即使很小一點)SelectedItem設置。

我該如何解決這個問題?我體面不能保持一個計時器完全隨機的間隔來解決該問題:d

謝謝您的幫助

+0

你可以嘗試SelectedIndex?它在過去爲我工作。 – Kugel 2010-12-12 20:26:05

+0

我遵循你的建議並嘗試了這個,但問題是完全一樣的:它隻影響UI中的selectedItem,如果有點延遲。 – 2010-12-13 00:17:14

回答

0

這似乎是優雅的方式來保證的ItemsSource初始化之前我設置來自VM的SelectedItem將擁有在我的視圖資源中聲明的ItemsSource的綁定源(不管它是什麼)。 我敢肯定,現在有人可以將我引向光明,我已經指出了這一點。

我已經嘗試過使用CollectionViewSource,但沒有找到在不中斷MVVM模式的情況下使用其過濾器功能的方法。另外,我不知道如何重新提升過濾器,因爲我曾經使用過ICollectionView.Filter(過濾出的項目取決於另一個組合框的選擇,沒有什麼真正稀奇的imo)。

也許在視圖中聲明並用作ItemsSource的資源不一定是CVS,我在這裏尋找建議。

- 編輯 - 我發現IsSynchronizedWithCurrentItem =「True」解決方案遍佈整個網絡實際上正在工作。我被誤導了,因爲它沒有解決我的問題,因爲我的控件上沒有使用剩餘的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

這對我不起作用。你有過類似的案例嗎? – 2010-12-12 22:43:47