【发布时间】:2010-03-17 02:01:15
【问题描述】:
我正在为一个简单的 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 上的绑定?或者也许刷新视图模型上的所有属性?还是我完全疯了,认为这一切都可以做到?
谢谢。
【问题讨论】:
标签: wpf binding viewmodel serialization