【发布时间】:2017-06-15 18:14:49
【问题描述】:
我的 Xamarin Forms 应用在 Android 上运行时表现异常。当我在 UWP 上运行时,一切似乎都运行良好,但是当我在 Android 上启动同一个应用程序时,我正在绑定的模型的公共属性似乎消失了,就好像它们不存在一样。
模型被定义为如下所示的接口:
public interface IRegionModel
{
string Id { get; set; }
string Name { get; set; }
string ShortName { get; set; }
string UrlName { get; set; }
string Description { get; set; }
string CityId { get; set; }
}
实现几乎相同:
public class RegionModel : IRegionModel
{
public string Id { get; set; }
public string Name { get; set; }
public string ShortName { get; set; }
public string UrlName { get; set; }
public string Description { get; set; }
public string CityId { get; set; }
}
我正在使用 RegionModel 类型的可观察集合填充我的 ViewModel:
public class RegionListViewModel : ViewModelBase
{
public ObservableCollection<IRegionModel> Regions { get; set; } = new ObservableCollection<IRegionModel>();
protected string CityId { get; set; }
public void Init(string cityId)
{
CityId = cityId;
}
public async override void Start()
{
base.Start();
LoadDesignData();
IsLoading = false;
}
protected override void LoadDesignData()
{
base.LoadDesignData();
for (var i = 1; i < 5; i++)
{
var model = new RegionModel()
{
Id = i.ToString(),
Description = "Region description " + i.ToString(),
ShortName = "Downtown",
Name = "Downtown",
UrlName = "Downtown",
CityId = "mcallen"
};
Regions.Add(model);
}
}
}
如您所见,我可以访问模型的每个属性,并用我的属性填充它们。
但是,当我在 android 上运行应用程序时,这些属性立即不可见:
我没有收到任何异常或错误,但属性根本不存在。
我认为这可能是由于过时的二进制文件(如此处建议:C# some public properties are not accessible, actually completely missing)
但是,我进行了全面清理和手动清理,手动清除了每个项目上的所有 bin/obj 文件夹并重建了它。此外,我进行了一些代码更改和 XAML 更改,并且这些更改都显示出来了,因此该项目肯定似乎正在更新...
这里还有什么问题?属性怎么会消失?
【问题讨论】:
-
检查链接选项,如果您选择了“全部链接”,那么如果分析器无法找到用法,它将删除“未使用”属性。
-
另外,您确定它们不存在并且调试器没有问题吗?您是否尝试在声明后添加代码以检索值?我有时会看到这样的行为,调试器在调试时无法检索所有数据。
-
该死的,就是这样!链接是 SDK 和用户程序集。当我更改为 none 时,它不会构建,但是当我将其更改为 SDK 时,它才起作用!请重新发布作为答案,以便我接受!顺便说一句,这个选项到底意味着什么?为什么我不想链接我的程序集?
-
正是您禁用了程序集的链接,这会阻止优化器删除未使用的代码,这就是您要使用它的原因。如果代码工作正常,链接一切都会减少包大小,因为死代码将被删除
标签: c# xamarin.android xamarin.forms