我正在为一个简单的ETL工具编写一个单窗口UI。 UI由窗口,窗口背后的代码,窗口的视图模型和业务逻辑组成。我想为用户提供保存UI状态的功能,因为大约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上的绑定?或者可能刷新视图模型上的所有属性?或者我完全疯了以为可以做到这一点吗?
感谢。
答案 0 :(得分:2)
假设你的loadState_Click
事件在后面的Window代码上,你可以试试这个。
private void loadState_Click(object sender, RoutedEventArgs e)
{
string statePath = this.getFilePath();
this.DataContext = ViewModel.LoadModel(statePath);
}