簡體   English   中英

為什么Silverlight View不會引發null異常?

[英]Why does Silverlight View not throw a null exception?

給定具有以下綁定的Silverlight視圖:

<TextBox Width="200" Text="{Binding Customer.FirstName, Mode=TwoWay}"/>

后面的代碼如下:

CustomerClass Customer {get; set;}

這不會引發NullReferenceException但是以下內容

String FirstName 
{
    get { return Customer.FirstName; }
}

當我嘗試綁定到FirstName而不是Customer.FirstName ,為什么會這樣,如何解決? (除了直接綁定到Customer.FirstName或初始化CustomerClass對象之外)

編輯 :解決可能的重復問題。 我以為綁定是在第一次初始化視圖時仍然嘗試獲取引用,不是這種情況嗎? 如果是這樣,那么我可以看到獲得參考與僅在查看時綁定之間的區別

我以為綁定是在第一次初始化視圖時仍然嘗試獲取引用,不是這種情況嗎?

綁定過程旨在處理空值,並將檢查給定的初始目標引用 ,如果為空則不嘗試任何操作。 請記住,綁定只是對指定路徑/​​位置的反射過程,而不是對值的實際提取。

當綁定發現它試圖反映的位置Customer.FirstName為null時,它將在那里停止。

但是,當給定FirstName的綁定時,該綁定的位置 引用是非常有效的。 答對了! 然后,當綁定后的最終操作要提取值時,將調用getter ,該方法最終會引發異常,因為CustomerFirstName為null。

如何糾正呢?

考慮使用TargetNullValue添加到綁定中,這是null時要使用的備用綁定。 或在綁定為null時直接提供FallbackValue以使用。

或者將GUI設計為不依賴於可能為null的對象的子屬性。

XAML綁定本身不會拋出NullReferenceException ,但它們也不會捕獲由屬性getter拋出的異常。 在某些“風味”(如WPF)中,具有擴展的綁定屬性(如FallbackValueTargetNullValue (我不確定Silverlight支持多少功能。)

綁定失敗時,將寫入跟蹤警告消息,但不會引發異常。

在第一種情況下,將評估屬性getter並返回null

在第二種情況下,將對屬性getter進行評估,但由於異常而無法將值返回到綁定系統。

要更正它,只需在getter中檢查是否為null ,如果是,則返回默認值:

string FirstName 
{
    get { return Customer == null ? string.Empty : Customer.FirstName; }
}

暫無
暫無

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

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