【问题标题】: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】:

    我总是使用以下方法。 我为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}
    

    【讨论】:

      【解决方案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}"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-02
          • 1970-01-01
          • 2023-03-13
          • 2014-09-25
          • 2016-01-30
          • 2015-12-13
          • 2020-09-15
          • 2020-06-03
          相关资源
          最近更新 更多