【问题标题】:How to use xBind with ViewModelLocator?如何将 xBind 与 ViewModelLocator 一起使用?
【发布时间】:2016-01-13 17:44:11
【问题描述】:
想要使用新的 x:Bind 编译时绑定与 MVVMLight 和 ViewModelLocator 类。
如何更改它以使用 x:Bind?
DataContext="{Binding Login, Source={StaticResource Locator}}"
似乎不支持来源,所以失败了:
DataContext="{x:Bind Path=Login, Source={StaticResource Locator}}"
那怎么办?
【问题讨论】:
标签:
c#
mvvm-light
win-universal-app
【解决方案1】:
我总是使用以下方法。
我为View 的DataContext 保留常规绑定,所以在您的示例中离开
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}
【解决方案2】:
你需要通过你喜欢的代码来暴露这个属性
public sealed partial class MainPage : Page
{
public LoginViewModel Login
{
get
{
return Locator.Login;
}
}
public MainPage()
{
InitializeComponent();
}
}
与在您的 xaml 中相比,您可以在没有 Source 的情况下使用此登录属性
DataContext="{x:Bind Login}"
【解决方案3】:
确保你给你的 Page.DataContext 一个名字...
<Page.DataContext>
<viewModels:SettingsPageViewModel x:Name="ViewModel"/>
</Page.DataContext>
有了这个,你可以DataContext="{x:Bind ViewModel.Login}"