2017-02-22 8 views
0

私はビューを持っています。私はそこにバインド可能なプロパティを持っています。このビューのXAMLで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(); 
    } 
} 

私はこのようなプロパティを注文するバインディングだ:

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ではなく、BindingContextとして注文を渡します。次に、ビューを次のようなページに付けることなくサイズを測定できます。

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

Bindingは、Pageまたはそれ以外に適用する必要はありません。

get_Orderにブレークポイントを設定する方法を使用していないと考えられるかもしれませんが、XamlローダーはGetValueを直接使用します。 Bindingが正しく適用されているかどうかを調べる一般的な方法は、BindingPassthroughConverterを追加して(自分で調べる必要があります)、Convertメソッドにブレークポイントを設定します。

これは、スクリーンに表示されるページに追加されていない限り、Measureとは言えません。それ以前にMeasureにしようとすると、実際にはダミー値が得られます。

+0

ダミー値ではありません。それはすべてを適切に測定していますが、バインディングを適用することはありません。ページに追加することなく測定できないのはなぜですか?測定方法は測定に必要なすべてのデータを受け取ります(私は、視野が収まるようにしなければならない幅と高さについて言います)。 しかし、私は(動的に作成された)ページに追加しようとしましたが、何も変わりませんでした。 –

+0

バインドされた値を確認するにはどうしたらいいですか? –

+0

Xamlローダは、適用する値が(InitializeComponentの後に)ビューの後に作成されるため、この場合バインディングを実行できません。私は何らかの形で値をチェックするように強制する必要があります。なぜなら、双方向のバインディングであり、私は値を設定し、すべてのバインディングは新しい値を設定しなければならないからです –

関連する問題