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
,则确实会得到虚拟值。
非虚拟值。它正在测量一切正常,但因为它没有应用绑定。为什么我不能在没有添加页面的情况下进行测量?测量方法接收所有需要测量的数据(我说的是视图必须尝试适合的宽度和高度)。 但我试图将其添加到页面(动态创建) - 没有任何更改 –
什么使视图检查绑定的值? –
Xaml loader在这种情况下无法执行绑定,因为在创建视图之后(在InitializeComponent之后)会应用值。我需要强制某种方式来检查值。因为它不想更新一切,所以它必须这样做,因为这里是双向绑定,我设置了一个值,所有绑定都必须填充一个新值 –