3つのパブリックプロパティを持つ単純なクラスには奇妙な問題があります。何らかの理由で、プロパティを定義するコードが同一であっても、2つのプロパティのみが存在します。C#一部のパブリックプロパティにアクセスできません。実際には完全に不足しています。
私はこれら3つのプロパティにバインドしていますが、プロパティのうち2つは機能します(メトリック& weightUnits)。しかし、「distanceUnits」はありません。
このクラスがインスタンス化され、オブジェクト上にカーソルを置くコードにブレークポイントを設定すると、「metric」と「weightUnits」のみが公開プロパティとして表示され、「非公開メンバー」を展開するとすべてそこには "distanceUnits"がまだありません。
デバッガのスクリーンショット:
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」が表示されるのでしょうか?
クリーンビルドしてVSを再起動しましたか? –
はい私は "ビルド - >クリーンなソリューション"を試して、VSを再起動しました。私はちょうどそれをもう一度やりました。変化なし。試してみることができる他の「再構築」または「クリーン」タイプの手順がありますか? – IamJohnny45
これまで聞いたことはありません。 'App'クラスと同じアセンブリに' AppGlobalSettings'がありますか? –