Я пишу однооконный интерфейс для простого инструмента ETL. Пользовательский интерфейс состоит из окна, кода для окна, модели представления для окна и бизнес-логики. Я хотел предоставить пользователям функциональность для сохранения состояния пользовательского интерфейса, потому что содержимое около 10-12 текстовых полей будет повторно использоваться между сессиями, но специфично для пользователя. Я подумал, что могу сериализовать модель представления, которая содержит все данные из текстовых полей, и это работает нормально, но у меня возникают проблемы с загрузкой информации из сериализованного XML-файла обратно в текстовые поля.
Конструктор окна:
public ETLWindow()
{
InitializeComponent();
_viewModel = new ViewModel();
this.DataContext = _viewModel;
_viewModel.State = Constants.STATE_IDLE;
Loaded += new RoutedEventHandler(MainWindow_Loaded);
}
XAML:
<TextBox x:Name="targetDirectory"
IsReadOnly="true"
Text="{Binding TargetDatabaseDirectory, UpdateSourceTrigger=PropertyChanged}"/>
Соответствующее свойство ViewModel:
private string _targetDatabaseDirectory;
[XmlElement()]
public string TargetDatabaseDirectory
{
get { return _targetDatabaseDirectory; }
set { _targetDatabaseDirectory = value; OnPropertyChanged(DataUtilities.General.Utilities.GetPropertyName(() => new ViewModel().TargetDatabaseDirectory)); }
Загрузка события в коде:
private void loadState_Click(object sender, RoutedEventArgs e)
{
string statePath = this.getFilePath();
_viewModel = ViewModel.LoadModel(statePath);
}
Как вы можете догадаться, метод LoadModel десериализует сериализованный файл на диске пользователя.
Я не мог найти много в Интернете по этому вопросу. Я знаю, что это, вероятно, связано с моими привязками. Есть ли способ обновить привязки в XAML после десериализации модели представления? Или, возможно, обновить все свойства в представлении модели? Или я совершенно безумен, думая, что это можно сделать?
Спасибо.