簡體   English   中英

Xamarin.Forms綁定-隱式類型轉換是否在代碼中完成,而不在XAML中完成?

[英]Xamarin.Forms bindings - Is implicit type conversion being done in code, but not in XAML?

在我正在工作的Xamarin.Forms項目中,我注意到我們將許多整數值綁定到標簽文本。 例如:

myLabel.SetBinding(Label.TextProperty, nameof(MyViewModel.TotalQty));

其中MyViewModel.TotalQty是一個int

Xamarin指南中的這篇文章說:

在Xamarin.Forms中,綁定不執行任何隱式類型轉換,並且如果您需要將非字符串對象顯示為字符串,則必須提供類型轉換器或使用StringFormat。

但是我正在使用的代碼可以正常工作,因此顯然存在隱式類型轉換。 因此,我的結論是,本文中的語句錯誤/已過時,或者該語句適用於XAML,但不適用於代碼。 我在網上找不到答案-有人知道嗎?

並不是在談論官方文檔,但是根據我的經驗,我注意到綁定的設置就像對象擴展一樣(值就像object一樣簡單地使用,正如您在源代碼中可以看到的那樣),並且應該從內部進行顯式類型轉換目標類型的值,需要在創建可綁定屬性時設置屬性的類型。

例如:

public static readonly BindableProperty MyCommandProperty = BindableProperty.Create(nameof(MyCommand), typeof(Command), typeof(MyObjectType), null, BindingMode.OneWay);
public Command MyCommand
{
    get { return (Command)GetValue(MyCommandProperty); }
    set { SetValue(MyCommandProperty, value); }
} 

需要注意的幾點:

  • 在靜態BindableProperty的Create方法中,我設置了屬性的真實類型(Command-2nd arg);
  • 在我的屬性中,我使用SetValue方法,該方法接收object值。
  • 類型化的MyCommand屬性強制其內部使用相同的類型,例如MyProperty = new Command(() => { return; }); 並使MyProperty = string.Empty; 無效;

記住XAML代碼是一種標記語言,整個代碼將被“翻譯”為C#。 自然可以對它的使用有一些推斷和約定,但要應用相同的規則。

希望對您有幫助。 (對不起,我的英語不好)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM