2016-05-23 43 views
0

我正在嘗試一個保存/加載機制在業務應用程序中重用。我有基礎讀/ ObservableCollection<>到/從xml,使用屬性來描述我的類屬性。這部分工作。我可以將ObservableCollection保存爲XML,然後在下次運行程序時將XML加載回ObservableCollection如果ComboBox綁定到ObservableCollection時何時收到它的項目?

這是我的問題。我有一個ComboBox其0123¾ 當我運行該程序,它接受綁定就好了,但ComboBox本身不填充自己,直到以後。我想將SelectedItem設置爲我從XML加載的ObservableCollection<Flag>中的第一項。雖然沒有任何反應,因爲程序正在執行它的啓動方法,Items.Count仍然爲0。我猜ComboBox不會自己填充,直到它獲得焦點。我如何解決這個問題?我可以強制ComboBox自行填充嗎?我試過cb_ARDAR_ARFlag.Items.Refresh();

XAML:

<ComboBox Name="cb_ARDAR_ARFlag" 
      ItemsSource="{Binding}" 
      SelectionChanged="cb_ARDAR_ARFlag_SelectionChanged"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Flag_Desc}"/> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

相關代碼:

public MainWindow() 
    { 
     InitializeComponent(); 

     setDataBinding(); 

     loadSavedData(); 
    } 

    private void setDataBinding() 
    { 
     //Returns ObservableCollection<Flag> 
     cb_ARDAR_ARFlag.DataContext = Flag.getOCAvailableFlags(); 
    } 
    private void loadSavedData() 
    { 
     //When it gets here the ItemCount is 0 so nothing happens. 
     //Refresh didn't help 
     cb_ARDAR_ARFlag.Items.Refresh(); 
     Flag f = Enforcement_Save.loadOCARFlag().First(); 
     cb_ARDAR_ARFlag.SelectedItem = f; 
    } 

在這一點上,我仍然不知道在最後的代碼將成功地識別出正確的「標誌」要選擇的項目,或者如果我最終會使用Linq。順便提一句,這引出了另一個問題。莫名其妙地你可以LinqComboBox.Items嗎?

+0

所有這些東西變成非問題,如果您使用綁定和一個視圖模型。 –

回答

1

我重新創建了您的問題,並且您的答案是正確的,在loadSavedData方法中,項數count = 0。在構造函數完全執行之後,組合框似乎不會被填充。

在我發現你可以使用ItemsSource屬性的時候加載組合框此期間,您希望它加載:

cb_ARDAR_ARFlag.ItemsSource = Flag.getOCAvailableFlags();

+0

這對我的目的很有效。通過DataContext進行綁定對於此目的不是必需的。 –

相關問題