2013-11-28 142 views
1

我有一個WPF應用程序,我正在ViewModel構造函數中設置一些組合框。 我填充組合框,然後設置CurrentChanged EventHandler,但每次視圖加載此事件被觸發。 我希望能夠阻止加載時觸發的CurrentChanged事件。WPF CollectionView.CurrentChanged在加載時觸發事件

這是我的ViewModel構造函數。

public MyViewModel() 
    { 
     this.Initialize(); 
     carNames = new CollectionView(GetCarNames());//method that returns a List<string> collection 
     companyNames = new CollectionView(GetCompanyNames());//method that returns a List<string> collection 
     carNames.CurrentChanged += new EventHandler(carNames_CurrentChanged); 
     companyNames.CurrentChanged += new EventHandler(companyNames_CurrentChanged); 
    } 

這裏是我的一個EventHandlers。

void carNames_CurrentChanged(object sender, EventArgs e) 
    { 
     if ((sender as CollectionView).CurrentItem != null) 
     { 
      //Do Something   
     } 
    } 

最後這裏是我的組合框在我看來。

<ComboBox Margin="5" 
     SelectedValue="{Binding Path=SelectedCar}" 
     ItemsSource="{Binding carNames}" 
     IsSynchronizedWithCurrentItem="True" 
     x:Name="cmbCar" /> 

所以我的問題是!如何防止我的EventHandler在視圖加載時被觸發。

任何幫助表示讚賞。

乾杯。

諾埃爾

回答

1

爲了避免處理程序被稱爲負載你需要確保該視圖被加載後,它被設置。你的ViewModel如何被實例化?如果它適合你的設計,你可以在視圖加載後創建它,但我不會推薦這個選項。

更好的選項 - 雖然不是很優雅 - 可能是將(OneWayToSource)綁定到ComboBox.IsLoaded屬性,並在ViewModel綁定屬性更改爲true時設置處理程序。

作爲一種替代方案,難道你不能只注意SelectedCar屬性更改的變化並執行你的邏輯嗎?

+0

我在考慮關注SelectedCar屬性的變化,但認爲我錯過了一些可以輕鬆阻止EventHandler被解僱的事情。我將使用SelectedCar屬性來檢查更改。乾杯。 – Nollaig