Я пытаюсь использовать механизм сохранения/загрузки для повторного использования в бизнес-приложении. У меня есть основа для чтения/записи ObservableCollection<>
в/из xml
, используя атрибуты для описания свойств моего класса. Эта часть работает. Я могу сэкономить ObservableCollection
до XML
, а затем загрузить XML
обратно в ObservableCollection
при следующем запуске программы.Когда ComboBox получает свои Элементы, если он привязан к ObservableCollection?
Вот моя проблема. У меня есть ComboBox
, у которого ItemsSource.DataContext = ObservableCollection<Flag>;
Когда я запускаю программу, он принимает привязку только штрафом, но сам ComboBox
не заполняет себя до конца. Я хочу установить SelectedItem как первый элемент в ObservableCollection<Flag>
, который я загрузил из XML. Ничего не происходит, потому что, поскольку программа выполняет свои методы запуска, 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. Что, кстати, приводит меня к другому вопросу. Можете вы Linq
до ComboBox.Items
как-нибудь?
Все такого рода вещи становится не проблема, если вы используете Наручники и viewmodel. –