xamarin形式:控制可以绑定自己吗?

时间:2016-11-22 11:22:27

标签: mvvm xamarin binding xamarin.forms

假设我在xaml中有一个Image标签,并且希望是方形大小。

var $form = {
    5: {
        480: {
            value: []
        }
    }
};

for (var $i = 0; $i < 6; $i++) {
    $form[5][480]['value'][$i] = Math.floor(Math.random() * (6 - 4 + 1)) + 4;
}

console.log($form);

此处的演示代码有4个图像,将它们水平放置在网格中。宽度将同等定义。所以我希望高度与宽度相同。我可以像这样绑定自己

<Grid HorizontalOptions="Fill">
                <Grid.RowDefinitions>
                    <RowDefinition Height="auto">
                    </RowDefinition>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <Image></Image>
                <Image></Image>
                <Image></Image>
                <Image></Image>
            </Grid>

1 个答案:

答案 0 :(得分:0)

除非你在代码中的其他地方专门设置它,否则你的WidthRequest将为-1,表示控件没有明确说明它想要的宽度,而是依赖布局系统来锻炼正确的尺寸。

所以这种绑定虽然在技术上是正确的,但是没用。 您可以尝试绑定到Width属性,该属性是readonly属性,一旦控件布局,它就会使用实际尺寸进行更新。

您还可以覆盖相应的事件并在那里指定所需的高度。

请记住,高度=“自动”的网格行将导致大量的布局计算。特别是在它们已经在可视化树中之后更改控件大小时。 您的布局运行**将是*慢。

我建议你找出更好的解决方案。例如,一旦布局引擎计算出该设备的单元格宽度,就会对网格行应用固定高度。