У меня есть простой класс, который предоставляет коды состояния, такие как:
public class StateProvider
{
static string[] _codes = new string[]
{
"AL",
"AK",
...
};
public string[] GetAll()
{
return _codes;
}
}
Мой класс модели, который поддерживает представление, выглядит примерно так:
public class ProjectModel : ChangeNotifier
{
StateProvider _states = new StateProvider();
public ProjectModel()
{
Project = LoadProject();
}
ProjectEntity _project;
public ProjectEntity Project
{
get { return _project; }
set
{
_project = value;
FirePropertyChanged("Project");
}
}
public string[] States { get { return _states.GetAll(); } }
}
И мой ComboBox XAMLвыглядит следующим образом:
<ComboBox SelectedValue="{Binding Project.State, Mode=TwoWay}" SelectedValuePath="{Binding RelativeSource={RelativeSource Self}}" ItemsSource="{Binding States}" />
Привязка работает от пользовательского интерфейса к объекту - если я выбираю состояние из комбо, то значение передается объекту проекта, и я могу сохранить его.Однако, если я завершаю работу и перезагружаюсь, значение кода состояния не привязывается от объекта к пользовательскому интерфейсу, и в комбинированном списке ничего не отображается.Затем, конечно, последующее сохранение обнуляет значение состояния объекта.
Я хочу, чтобы это было очень просто, поскольку я хочу отображать коды состояния и сохранять коды состояния (я не хочу отображать полное имя состояния).Так что я не хочу возиться с созданием класса State, который имеет свойства Code и FullName, и избегать необходимости использовать свойства SelectedValuePath и DisplayMemberPath комбинированного списка.
Редактировать: добавлен в код, как ProjectModelизменить уведомление.Обратите внимание, что класс ProjectEntity делает это тоже.Поверь мне это работает.Я пропустил это, потому что он также наследуется от базового класса Entity, который изменяет уведомление посредством отражения.Двухстороннее связывание работает на всем, кроме комбинированного списка.