C#的一些公共属性无法访问,实际上完全缺失

时间:2016-11-29 17:01:28

标签: c# xamarin data-binding properties public

我对一个有3个公共属性的简单类有一个奇怪的问题。出于某种原因,只有2个属性存在"即使定义它们的代码是相同的。

在代码的其他地方我绑定到这3个属性,其中2个属性工作(metric&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 **
...
}

我知道该物业"存在"并且是公开的,因为我输入了调试代码(如上所述)并且它有效(它确实称为" set"" distanceUnits"的方法)但它没有显示在调试器和绑定不起作用。

为了完整起见,这里是显示distanceUnits:

的标签的绑定代码
        Binding girthUnitBinding = new Binding("distanceUnits");
        girthUnitBinding.Source = App.appSettings;
        girthCell.unitLabel.SetBinding(Label.TextProperty, girthUnitBinding);

在该部分中,如果我编辑" distanceUnits" to" weightUnits"作为测试,绑定工作。

所以任何想法为什么propertyChanged处理程序和调试器都能看到" weightUnits"但不是" distanceUnits" ?

1 个答案:

答案 0 :(得分:2)

感谢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
  5. 注意:您会认为"构建 - >清洁解决方案" (或类似的)会为你做这件事,但事实并非如此。您必须手动进入并自行删除文件。

    希望这有助于某人,并再次感谢Ed让我走上正确的道路。