2014-01-14 63 views
0

獲取或設置綁定元素,實現INotifyPropertyChanged,使綁定元素在值更改時自動刷新。增加WPF MVVM中的綁定元素

public string number 
    { 
     get 
     { 
      return _number.Number + 1; 
     } 
     set 
     { 
      _number.Number = value; 
      OnPropertyChanged("number"); 
     } 
    } 

然後我想一個標籤

HTML

<Label Content="{Binding Path=number}" Height="28" Name="label1" Width="108" /> 

但是,當我執行的代碼,數量會正確顯示上顯示的數字,但它再次執行關閉和,舊值顯示...我的問題是如何顯示重新啓動應用程序後標籤中最後增加的值?


重要注意事項: 當我第一次執行時,數值是1,然後用一些數據填充表格並將其保存到數據庫,然後數字將增加到2.然後我關閉我的整個應用程序並再次運行,標籤上顯示的值1。我想顯示2 ...這就是問題所在

+0

如果您關閉並重新執行什麼?整個應用程序?在這種情況下,您正在經歷的行爲是正常的。 – Alberto

+0

當我第一次執行時,數字的值是1,然後用一些數據填寫表格,並將其保存到數據庫,然後數字將增加到2.然後我關閉我的整個應用程序並再次運行,顯示標籤值1.我想顯示2 ...這就是問題 – Jinesh

+0

如果您想要在應用程序會話(包括系統關閉)之間持續存在,則需要將數據存儲在內存之外。這意味着您有許多選項,包括但不限於用戶/應用程序設置,數據庫,XML或其他平面文件,註冊表等。您需要收集此存儲的值並相應地顯示/增加它。 – bland

回答

0

試試這個:

public string number 
{ 
    get 
    { 
     number += 1; 
     return _number.Number; 
    } 
    set 
    { 
     _number.Number = value; 
     OnPropertyChanged("number"); 
    } 
} 
0

所有性的判定對象存儲在內存和存儲得到清潔上應用關閉。在啓動應用程序時,除非您明確設置,否則每個屬性都通過默認值進行實例化。這就是爲什麼每次你開始應用程序價值「刷新」。
要擁有不依賴於應用程序生命週期的屬性,應將其放入一些外部存儲器中。無論是文件,數據庫或其他地方:

商店數到一個文件:

System.IO.StreamWriter file = new System.IO.StreamWriter("storage.txt"); 
file.WriteLine(_number); 
file.Close(); 

並重新初始化它:

using (TextReader reader = File.OpenText("test.txt")) 
{ 
    _number = reader.ReadLine(); 
} 
0

的問題是,你實際上並沒有設置_number的價值,你只是返回值+ 1.

在Thejaks的答案屬性用於增量,但我會認爲增加_number.Number(+ = 1或++)更好。

編輯: - 確定,所以澄清,我會建議解決方案:

public string number 
    { 
     get 
     { 
      _number.Number += 1; 
      return _number.Number; 
     } 
     set 
     { 
      _number.Number = value; 
      OnPropertyChanged("number"); 
     } 
    } 
+0

這不是回答問題。 –

+0

這是,但也許我需要澄清 – Kezza

+0

實際的問題是,OP正試圖在應用程序重新啓動後恢復屬性值。 –