Xamarin形式强制视图绑定值

问题描述:

我有一个视图。我有一个可以绑定的财产。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); 

但它给了我错误的数字,因为没有应用绑定。 如何在视图未附加到页面时强制应用绑定?

我能够通过不做一个属性Order来解决这个问题,但是通过一个Order作为BindingContext。然后我可以测量视图的大小,而不必将其附加到如下所示的页面:

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

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

如果您的解决方法是在get_Order上设置断点,您可能会认为它们不适用,因为这是从未使用的,Xaml加载器直接使用GetValue。确定绑定是否正确应用的常用方法是在Binding中添加PassthroughConverter(不要查找它,您必须自己写),并将断点放在Convert方法中。

这就是说,你不能Measure什么,除非它被添加到屏幕上呈现的页面。如果您在此之前尝试使用Measure,则确实会得到虚拟值。

+0

非虚拟值。它正在测量一切正常,但因为它没有应用绑定。为什么我不能在没有添加页面的情况下进行测量?测量方法接收所有需要测量的数据(我说的是视图必须尝试适合的宽度和高度)。 但我试图将其添加到页面(动态创建) - 没有任何更改 –

+0

什么使视图检查绑定的值? –

+0

Xaml loader在这种情况下无法执行绑定,因为在创建视图之后(在InitializeComponent之后)会应用值。我需要强制某种方式来检查值。因为它不想更新一切,所以它必须这样做,因为这里是双向绑定,我设置了一个值,所有绑定都必须填充一个新值 –