2012-06-23 385 views
3

我有一個TabControl,在它下面我有幾個元素,如TreeViewDataGrid。當我展開樹並調整數據網格列的大小時,如果我然後選擇另一個選項卡並返回,則整個UI狀態將被遺忘。我必須重新展開樹並調整列的大小。如何保存WPF UI狀態?

有沒有一種明智的方法來保存UI狀態?讓我們劃分到這一點 -

  1. 臨時(內存)和
  2. 永久性的(在磁盤上)。

回答

8

要保存狀態,您可以在相應的控制(WidthHeightIsSelected等)的屬性綁定到你的綁定源的屬性,這將自動保存您temprory狀態(MVVM的情況下,即視圖模型。);爲了永久保存,您可以序列化您的ViewModel並將其保存在磁盤上,並在需要時明顯加載它。

像保存你的樹視圖狀態,您可以在對象(視圖模型),你TreeView勢必喜歡這個有IsExpandedIsSelected性能 -

<Style TargetType="{x:Type TreeViewItem}"> 
    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
</Style> 

您還可以使用項目設置保存的狀態您的應用程序, 看看這太問題 -

c# - approach for saving user settings in a WPF application?

和這篇文章 - User Settings Applied

+0

那麼,我會把我希望保存到我的視圖模型中的所有屬性?我認爲我的觀點模型會很快變得臃腫。是否有一個通用的方法來採取 - 即我有兩個樹視圖,所以我前綴'IsExpanded'屬性像'FooTreeViewIsExpanded'和'BarTreeViewIsExpanded'? – Tower

+0

@rFactor - 不,IsExpanded屬性將轉到TreeViewItem的Model;看看這篇文章的解釋 - [通過使用ViewModel模式簡化WPF TreeView](http://www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode) – akjoshi

+0

@rFactor - 如果你想保存很多控件/窗口的狀態,那麼你可以使用ProjectSettings approch;請參閱答案中提供的鏈接。 – akjoshi