[英]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.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); }
}
需要注意的幾點:
Create
方法中,我設置了屬性的真實類型(Command-2nd arg); SetValue
方法,該方法接收object
值。 MyProperty = new Command(() => { return; });
並使MyProperty = string.Empty;
無效; 記住XAML代碼是一種標記語言,整個代碼將被“翻譯”為C#。 自然可以對它的使用有一些推斷和約定,但要應用相同的規則。
希望對您有幫助。 (對不起,我的英語不好)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.