2010-03-17 69 views
1

我正在爲一個簡單的ETL工具編寫一個窗口的UI。用戶界面由窗口,窗口背後的代碼,窗口的視圖模型和業務邏輯組成。我想爲用戶提供保存UI狀態的功能,因爲大約10-12個文本框的內容將在會話之間重複使用,但是特定於用戶。我想我可以序列化視圖模型,其中包含來自文本框的所有數據,這工作正常,但我無法將序列化XML文件中的信息加載迴文本框。加載並將序列化視圖模型綁定到WPF窗口?

構造窗口的:

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}"/> 

視圖模型相應的屬性:在代碼

private string _targetDatabaseDirectory; 
    [XmlElement()] 
    public string TargetDatabaseDirectory 
    { 
     get { return _targetDatabaseDirectory; } 
     set { _targetDatabaseDirectory = value; OnPropertyChanged(DataUtilities.General.Utilities.GetPropertyName(() => new ViewModel().TargetDatabaseDirectory)); } 

Load事件後面:

private void loadState_Click(object sender, RoutedEventArgs e) 
    { 
     string statePath = this.getFilePath(); 
     _viewModel = ViewModel.LoadModel(statePath); 
    } 

如您所知,LoadModel方法將用戶驅動器上的序列化文件反序列化。

我在網上找不到關於這個問題的很多內容。我知道這可能與我的綁定有關。在反序列化視圖模型後,是否有一些方法可以刷新XAML上的綁定?或者可能刷新視圖模型的所有屬性?或者我完全瘋狂地想這些都可以做到?

謝謝。

回答

2

假設你的事件在窗口代碼後面,你可以試試這個。

private void loadState_Click(object sender, RoutedEventArgs e) 
{ 
    string statePath = this.getFilePath(); 
    this.DataContext = ViewModel.LoadModel(statePath); 
} 
+0

感謝凱恩。我明天會去嘗試,當我開始工作。 – 2010-03-17 04:44:36

+0

這工作!感謝凱恩。 – 2010-03-18 17:34:57