У меня странная проблема с простым классом, который имеет 3 общедоступных свойства. По какой-то причине только 2 свойства «существуют», хотя код, который их определяет, идентичен.
В другом месте кода я привязываюсь к этим трем свойствам, 2 из них работают (метрика и весовые единицы), а «distanceUnits» — нет.
Когда я ставлю точку останова на код, в котором создается экземпляр этого класса, и навожу указатель мыши на объект, в качестве общедоступных свойств отображаются только «метрика» и «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 class App : Application
{
public static AppGlobalSettings appSettings;
public App() {
appSettings = new AppGlobalSettings();
appSettings.distanceUnits = "in."; // ** just for debugging **
...
}
Я знаю, что это свойство "существует" и является общедоступным, потому что я добавил код отладки (как указано выше), и оно работает (действительно вызывает метод "set" для "distanceUnits"), но оно не отображается в отладчике и в привязка не работает.
Для полноты картины вот код привязки для меток, отображающих DistanceUnits:
Binding girthUnitBinding = new Binding("distanceUnits");
girthUnitBinding.Source = App.appSettings;
girthCell.unitLabel.SetBinding(Label.TextProperty, girthUnitBinding);
И в этом разделе, если я редактирую «distanceUnits» на «weightUnits» просто в качестве теста, привязка работает.
Итак, есть идеи, почему обработчик propertyChanged и отладчик могут видеть «weightUnits», но не «distanceUnits»?
AppGlobalSettings
в той же сборке, что и классApp
? - person 15ee8f99-57ff-4f92-890c-b56153   schedule 29.11.2016distanceUnits
последним, и он запускает копию двоичного файла, которая его не включает. - person 15ee8f99-57ff-4f92-890c-b56153   schedule 29.11.2016