2016-11-29 58 views
0

我有一個奇怪的問題,有一個簡單的類有3個公共屬性。由於某些原因,即使定義它們的代碼是相同的,只有兩個屬性「存在」。C#一些公共屬性不可訪問,實際上完全缺失

在代碼的其他地方,我綁定了這三個屬性,其中兩個屬性工作(公制& weightUnits),但「distanceUnits」不。

當我在實例化該類的代碼上放置斷點時,將鼠標懸停在對象上時,只有「metric」和「weightUnits」顯示爲公共屬性,當展開「非公共成員」時,那裏但是「distanceUnits」仍然缺失。

調試器屏幕截圖:

enter image description here

public class AppGlobalSettings : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private bool _metric; 
    public bool metric 
    { 
     get { return _metric; } 
     set { 
      _metric = value; 
      if (_metric) { 
       distanceUnits = "cm"; 
       weightUnits = "Kg"; 
      } 
      else { 
       distanceUnits = "in."; 
       weightUnits = "lbs"; 
      } 
      OnPropertyChanged(); 
     } 
    } 

    private string _weightUnits; 
    public string weightUnits { get { return _weightUnits; } set { _weightUnits = value; OnPropertyChanged(); } } 

    private string _distanceUnits; 
    public string distanceUnits { get { return _distanceUnits; } set { _distanceUnits = value; OnPropertyChanged(); } } 
... 
} 

我能想到的唯一的皺紋是該對象(見下文)實例爲「公共靜態的,但不能解釋爲什麼只有一些屬性可...

public class App : Application 
{ 
    public static AppGlobalSettings appSettings; 
    public App() { 
     appSettings = new AppGlobalSettings(); 
     appSettings.distanceUnits = "in."; // ** just for debugging ** 
... 
} 

我知道屬性「存在」,並且是公衆,因爲我把在調試代碼(如上所述)和它的作品(它確實調用了「distanceUnits」的「set」方法),但它不會顯示在調試器中,並且綁定不起作用。

爲了完整起見,這裏是標籤綁定代碼顯示distanceUnits:

 Binding girthUnitBinding = new Binding("distanceUnits"); 
     girthUnitBinding.Source = App.appSettings; 
     girthCell.unitLabel.SetBinding(Label.TextProperty, girthUnitBinding); 

而在這部分,如果我編輯「distanceUnits」到「weightUnits」只是作爲一個測試中,裝訂作品。

因此,任何想法爲什麼propertyChanged處理程序和調試器可以看到「weightUnits」,而不是「distanceUnits」?

+2

你試過乾淨的版本並重新啓動VS? –

+0

是的,我確實嘗試過「構建 - >清理解決方案」,並重新啓動VS.我只是再次確認。不用找了。是否還有其他可以嘗試的「重建」或「清潔」類型的程序? – IamJohnny45

+0

不是我所聽說過的。 'AppGlobalSettings'與'App'類在同一個程序集中? –

回答

1

感謝Ed Plunkett對這個實際構建/調試問題的評論,我能夠找到解決這個問題的解決方案,所以我想我會回答我自己的問題,以防萬一任何人在這個線程上絆倒儘管最初的問題和最終的答案似乎完全不相關。

我的解決方案是通過這個帖子的啓發: https://forums.xamarin.com/discussion/45327/newest-version-of-code-not-always-deployed-when-debugging-from-xamarin-studio

簡而言之:

  1. 關閉Visual Studio的
  2. 打開Windows資源管理器,然後導航至您的解決方案文件夾
  3. 刪除每個內容這些文件夾:
    • 發佈/ obj
    • 發佈/ bin中
    • 調試/ bin中
    • 調試/ OBJ
  4. 如果您的解決方案有多個項目,例如,如果您正在開發使用Xamarin跨平臺的解決方案,你可能需要爲解決方案中的每個項目文件夾執行此操作,例如:
    • 項目名稱
    • projectname.Droid
    • projectname.iOS

注意:您會認爲, 「建設 - >清理解決方案」(或類似)會爲你做這件事,但事實並非如此。您必須手動進入並自行刪除文件。

希望這可以幫助別人,並再次感謝Ed讓我走上正確的道路。