2017-06-15 45 views
0

我的Xamarin Forms應用程序在Android上運行時表現異常。當我在UWP上運行時,一切似乎都正常,但是當我在Android上啓動相同的應用程序時,我綁定的模型的公共屬性似乎消失了,就好像它們不存在一樣。公共C#屬性在Xamarin Forms上不可見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的觀察集合類型:

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應用程序,這些屬性立即無形:

properties set but missing!

我沒有得到任何異常或錯誤,但性能根本不存在。

我想也許這是由於陳舊的二進制文件(如這裏建議:C# some public properties are not accessible, actually completely missing

但是,我做了全面的清理和手動清潔,對每一個項目的手動清除了所有的bin/OBJ文件夾和重建它。此外,我做了一些代碼更改和XAML更改,這些都顯示出來了,所以項目肯定會更新...

還有什麼可能是錯誤的?屬性如何消失?

+0

檢查連接選項,如果您選擇了「全部連接」,那麼如果分析儀無法找到使用它將刪除「未使用」的屬性。 – Gusman

+0

另外,你確定它們不在那裏,它不是調試器的問題嗎?您是否嘗試在聲明後添加代碼以檢索值?我有時看到過這樣的行爲,調試器無法在調試時檢索所有數據。 – Gusman

+0

該死的,那就是它!聯動是SDK和用戶程序集。當我更改爲none時,它不會生成,但是當我將其更改爲SDK時,它才起作用!請轉貼爲答覆,以便我可以接受!順便說一句,這個選項甚至意味着什麼?爲什麼我不想鏈接我的程序集? – SelAromDotNet

回答

1

如果你已經鏈接你的組件,分析器可能未能確定那些屬性真的被使用,並且已經剝離了它們。

將鏈接選項設置爲「僅SDK」,它應該可以工作。