让 ControlTemplate 中的 AutowireViewModel 工作

Getting AutowireViewModel in a ControlTemplate to work

在我的 Xamarin 应用程序中,我使用 PRISM,在我的页面上,我使用 AutowireViewModel 支持我的视图模型。 我也在使用 ControlTemplates,因此我可以轻松更改外观。

    <ContentView 
        ControlTemplate="{StaticResource LoginTemplate}">
    </ContentView>

但问题是我无法让我的绑定在我的 contentTempaltes 上工作。 我使用 TemplateBinding 并尝试了 BindigContext。

          <Label Text="{TemplateBinding BindingContext.Text" FontSize="Large" HorizontalOptions="Center" Margin="0, 30, 0, 0" />

Parent我也试过了。但没有绑定。

          <Label Text="{TemplateBinding Parent.Text" FontSize="Large" HorizontalOptions="Center" Margin="0, 30, 0, 0" />

          <Label Text="{TemplateBinding BindingContext.Parent.Text" FontSize="Large" HorizontalOptions="Center" Margin="0, 30, 0, 0" />

          <Label Text="{Binding BindingContext.Text" FontSize="Large" HorizontalOptions="Center" Margin="0, 30, 0, 0" />

... 如果我创建一个只有一些属性的纯视图模型,我可以在 page.xaml

中应用 BindingContext 元素时绑定它

但我希望 Prism 将我的 AutowireViewModel 设置为 BindixContext... 但是怎么办?

我也尝试了 BindixContext="{TemplateBing ..."} 没有任何进展。

此致, 托拜厄斯

这应该有效:

<Label Text="{TemplateBinding MyText}"/>

如果您的视图模型上有 MyText 属性...

当我们添加BindingContext="{TemplateBinding Parent.BindingContext}" 在 out 模板的根元素上,我们可以使用普通的绑定。

所以看起来 BindingContext 不会从父级自动设置。 Parent 和 BindingContext 在我们的模板视图中为 null。

这看起来很奇怪,因为如果这可行,为什么这不能成为默认行为?