2017-02-22 62 views
0

我有一個視圖。我有一個可以綁定的財產。Xamarin形式強制視圖綁定值

public partial class OrderCard : ContentView 
{ 
    public static readonly BindableProperty OrderProperty = BindableProperty.Create(nameof(Order), typeof(Order), typeof(OrderCard), null); 

    public Order Order 
    { 
     get { return (Order)GetValue(OrderProperty); } 
     set { SetValue(OrderProperty, value); } 
    } 

    public OrderCard() 
    { 
     InitializeComponent(); 
    } 
} 

在該視圖中,我結合順序屬性像這樣的XAML:

Text="{Binding Order.Name, Source={x:Reference Root}}" 

根在一個視圖中的XAML OrderCard

名字當我使用這個視圖在頁面中一切正常。

但我想測量它的大小,甚至在添加到頁面之前。

var orderCard = new OrderCard { Order = order}; 
SizeRequest sizeRequest = orderCard.Measure(OrdersContainer.Width/5, OrdersContainer.Height); 

但它給了我錯誤的數字,因爲沒有應用綁定。 如何在視圖未附加到頁面時強制應用綁定?

回答

0

我能夠通過不做一個屬性Order來解決這個問題,但是通過一個Order作爲BindingContext。然後我可以測量視圖的大小,而不必將其附加到如下所示的頁面:

var orderCard = new OrderCard { BindingContext = order}; 
SizeRequest sizeRequest = orderCard.Measure(widthToTryToFitInTheView,heightToTryToFitInTheView); 
0

Binding s不需要附加到Page或任何其他要應用。

如果您的解決方法是在get_Order上設置斷點,您可能會認爲它們不適用,因爲這是從未使用的,Xaml加載器直接使用GetValue。確定綁定是否正確應用的常用方法是在Binding中添加PassthroughConverter(不要查找它,您必須自己寫),並將斷點放在Convert方法中。

這就是說,你不能Measure什麼,除非它被添加到屏幕上呈現的頁面。如果您在此之前嘗試使用Measure,則確實會得到虛擬值。

+0

非虛擬值。它正在測量一切正常,但因爲它沒有應用綁定。爲什麼我不能在沒有添加頁面的情況下進行測量?測量方法接收所有需要測量的數據(我說的是視圖必須嘗試適合的寬度和高度)。 但我試圖將其添加到頁面(動態創建) - 沒有任何更改 –

+0

什麼使視圖檢查綁定的值? –

+0

Xaml loader在這種情況下無法執行綁定,因爲在創建視圖之後(在InitializeComponent之後)會應用值。我需要強制某種方式來檢查值。因爲它不想更新一切,所以它必須這樣做,因爲這裏是雙向綁定,我設置了一個值,所有綁定都必須填充一個新值 –