2016-11-29 5 views
0

3つのパブリックプロパティを持つ単純なクラスには奇妙な問題があります。何らかの理由で、プロパティを定義するコードが同一であっても、2つのプロパティのみが存在します。C#一部のパブリックプロパティにアクセスできません。実際には完全に不足しています。

私はこれら3つのプロパティにバインドしていますが、プロパティのうち2つは機能します(メトリック& 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 static」としてインスタンス化されるということですが、なぜそれだけでは説明できないでしょういくつかのプロパティは、私が財産を知っている...

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); 

そして、そのセクションで、私はテストとしての「weightUnits」「distanceUnits」を編集した場合、バインディングが動作します。

なぜ、propertyChangedハンドラとデバッガに「distanceUnits」ではなく「weightUnits」が表示されるのでしょうか?

+2

クリーンビルドしてVSを再起動しましたか? –

+0

はい私は "ビルド - >クリーンなソリューション"を試して、VSを再起動しました。私はちょうどそれをもう一度やりました。変化なし。試してみることができる他の「再構築」または「クリーン」タイプの手順がありますか? – IamJohnny45

+0

これまで聞いたことはありません。 'App'クラスと同じアセンブリに' AppGlobalSettings'がありますか? –

答えて

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に感謝しています。

関連する問題