私は、ビジネスアプリケーションで再利用するためのセーブ/ロードメカニズムを試行しています。私は、ObservableCollection<>
をxml
に/から書き込んで、私のクラスのプロパティを記述する属性を使って、読み書きするための基礎を持っています。その部分は機能しています。 ObservableCollection
をXML
に保存してから、次にプログラムを実行したときにXML
をObservableCollection
に戻すことができます。ComboBoxはObservableCollectionにバインドされている場合、そのアイテムをいつ受信しますか?
ここに私の問題があります。私はComboBox
を持っていますItemsSource.DataContext = ObservableCollection<Flag>;
私はプログラムを実行すると、バインディングをうまく受け入れますが、ComboBox
自体は後でそれ自身を投入しません。 SelectedItemを、XMLからロードしたObservableCollection<Flag>
の最初の項目に設定したいとします。プログラムが起動メソッドを実行しているときには、Items.Count
は0
のままであるため、何も起こりません。私は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を使用して終了するかどうかを指定します。ところで、私は別の質問につながります。あなたはLinq
〜ComboBox.Items
なんてことができますか?
あなたはバインディングを使用した場合のもののこの種のすべてが非問題になるとビューモデル。 –