如何将 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}"
我总是使用以下方法。
我保留了 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}
确保给 Page.DataContext 起个名字...
<Page.DataContext>
<viewModels:SettingsPageViewModel x:Name="ViewModel"/>
</Page.DataContext>
有了它,您可以 DataContext="{x:Bind ViewModel.Login}"
想要将新的 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}"
我总是使用以下方法。
我保留了 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}
确保给 Page.DataContext 起个名字...
<Page.DataContext>
<viewModels:SettingsPageViewModel x:Name="ViewModel"/>
</Page.DataContext>
有了它,您可以 DataContext="{x:Bind ViewModel.Login}"