x:Bind无法绑定到附加属性

4
有人能否介绍一下如何正确完成这个操作?我在生成的代码后台中得到了编译器错误。
<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}来实现这个。)

你能发布一下错误信息吗? - Bruno Joaquim
类似 Rectangle 不包含成员 Row - Markus Hütter
尝试将BlueRectx:Name更改为Name。通过阅读文档,看起来你做得没错。 - Mike Eason
似乎他们错过了这个用例,它可以在没有模式的情况下工作,使用不带模式的属性(如Rect.Fill)也能正常工作,但是没有一个示例介绍这种用法。如果这个问题长时间得不到解决,你或许应该向微软报告一个 bug。 - kirotab
@Bart,是的,我认为生成的方法中有一个非常简单的错误,那就是在那里使用了错误的类型。 - Markus Hütter
我应该将这个错误提交到哪里?有人可以帮我做这件事吗? - Markus Hütter
2个回答

0

使用元素名称进行绑定:

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

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 初始化之前尚未准备好时。


很高兴你告诉我关于Bindings.Update()的事情,但我认为我们都可以达成共识,这不是解决这个bug的方法。我可以看到使用这种方法会发生各种不必要的事情。x:Bind相对于Binding的最大优势应该是速度。这就是为什么OneTime绑定模式是标准的原因。这将不允许在同一视图上进行真正的OneTime绑定。此外,这也是一个可维护性的噩梦。我通过Visual Studio中的笑脸图标提交了一个bug,希望这个问题能够尽快得到解决,因为这实际上只是代码生成器中的一个简单失误。 - Markus Hütter
同意。所以这只是特定场景的解决方法。我也会尝试通过内部途径报告此问题,但无法确定何时可以修复。X:Bind仍有很长的路要走。 - Alan Yao - MSFT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接