x:绑定不绑定附加属性

时间:2015-11-13 11:28:28

标签: c# xaml windows-10 uwp

有人可以说明这是如何正确完成的吗?我在后面生成的代码中遇到编译器错误。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="100"/>
        <RowDefinition Height="100"/>
    </Grid.RowDefinitions>
    <Rectangle x:Name="BlueRect" Width="100" Height="100" Grid.Row="1" Fill="Blue" />
    <Rectangle Width="100" Height="100" Grid.Row="{x:Bind BlueRect.(Grid.Row),Mode=OneWay}" Fill="Red" />
</Grid>

(这只是一个最小的例子,没有Mode=OneWay它显然有效,但我需要...而且,我想用{x:Bind}而不是传统的{{Binding} {1}})

2 个答案:

答案 0 :(得分:0)

使用元素名称绑定:

<Rectangle Width="100" Height="100" Grid.Row="{Binding ElementName=BlueRect,Path=(Grid.Row),Mode=OneWay}" Fill="Red" />

答案 1 :(得分:0)

您可以在Visual Studio connect上报告此内容。

我认为您可以通过在更改行时调用this.Bindings.Update()并保持x:bind OneTime来考虑解决此问题。

例如,我们可以在按钮单击中更改“BlueRect”的Grid.Row,以下代码显示了我们如何处理这种情况。

在XAML中:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="100"/>
        <RowDefinition Height="100"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Rectangle x:Name="BlueRect" Width="100" Height="100" Grid.Row="1" Fill="Blue" />
    <Rectangle Width="100" Height="100" Grid.Row="{x:Bind BlueRect.(Grid.Row)}" Fill="Red" />
    <Button Content="Click me" Grid.Row="3" Click="Button_Click"></Button>
</Grid>

代码背后:

private void Button_Click(object sender, RoutedEventArgs e)
{
    Grid.SetRow(BlueRect, 2);
    this.Bindings.Update();
}
当数据加载异步时,也可以使用

this.Bindings.Update(),并且在x:bind初始化之前数据可能没有准备好。