如何将 xBind 与 ViewModelLocator 一起使用?

How to use xBind with ViewModelLocator?

想要将新的 x:Bind 编译时绑定与 MVVMLight 和 ViewModelLocator class 结合使用。

如何更改它以使用 x:Bind?

DataContext="{Binding Login, Source={StaticResource Locator}}"

来源似乎不受支持,因此失败:

DataContext="{x:Bind Path=Login, Source={StaticResource Locator}}"

那怎么办?

您需要像

一样通过您的代码隐藏此属性
public sealed partial class MainPage : Page
{
    public LoginViewModel Login
    {
        get
        {
            return Locator.Login;
        }
    }

    public MainPage()
    {
        InitializeComponent();
    }
}

比起在您的 xaml 中,您可以使用此登录名 属性 而无需来源

DataContext="{x:Bind Login}"

我总是使用以下方法。 我保留了 ViewDataContext 的常规绑定,因此在您的示例中保留

DataContext="{Binding Login, Source={StaticResource Locator}}"

但在后面的代码中,我使用 DataContext 来设置 ViewModel 的 属性,以便在同一个 View 上的所有 x:Binding 中使用],像这样:

private LoginViewModel ViewModel => DataContext as LoginViewModel;

这样,当您需要 x:Bind 时,您可以这样做:

{x:Bind ViewModel.UserName, Mode=OneWay}

确保给 Page.DataContext 起个名字...

<Page.DataContext>
    <viewModels:SettingsPageViewModel x:Name="ViewModel"/>
</Page.DataContext>

有了它,您可以 DataContext="{x:Bind ViewModel.Login}"