2016-05-23 3 views
0

私は、ビジネスアプリケーションで再利用するためのセーブ/ロードメカニズムを試行しています。私は、ObservableCollection<>xmlに/から書き込んで、私のクラスのプロパティを記述する属性を使って、読み書きするための基礎を持っています。その部分は機能しています。 ObservableCollectionXMLに保存してから、次にプログラムを実行したときにXMLObservableCollectionに戻すことができます。ComboBoxはObservableCollectionにバインドされている場合、そのアイテムをいつ受信しますか?

ここに私の問題があります。私はComboBoxを持っていますItemsSource.DataContext = ObservableCollection<Flag>; 私はプログラムを実行すると、バインディングをうまく受け入れますが、ComboBox自体は後でそれ自身を投入しません。 SelectedItemを、XMLからロードしたObservableCollection<Flag>の最初の項目に設定したいとします。プログラムが起動メソッドを実行しているときには、Items.Count0のままであるため、何も起こりません。私は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; 
    } 

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

関連するコード:私はcb_ARDAR_ARFlag.Items.Refresh();

XAMLを試してみました選択される項目、またはLinqを使用して終了するかどうかを指定します。ところで、私は別の質問につながります。あなたはLinqComboBox.Itemsなんてことができますか?

+0

あなたはバインディングを使用した場合のもののこの種のすべてが非問題になるとビューモデル。 –

答えて

1

あなたの問題を再現しましたが、正しいですが、アイテム数はloadSavedDataメソッドで0です。コンボボックスは、コンストラクターが完全に実行されるまで、埋め込まれていないようです。私はあなたがそれをロードしたい時にコンボボックスをロードするためにItemsSourceプロパティを使用することができた一方

cb_ARDAR_ARFlag.ItemsSource = Flag.getOCAvailableFlags();

+0

それは私の目的のためにうまく動作します。この目的のためにDataContextを介したバインディングは必要ありません。 –

関連する問題