Xaml绑定在Template 10应用程序中无法看到ViewModel

3

我正在使用最新的Template 10 VS扩展来创建一个UWP Windows 10移动应用程序。

我已经更新了模板,以使用IOC(Autofac),以便在app.xaml.cs中覆盖的INavigable ResolveForPage(Page page, NavigationService)方法中解析ViewModels。

我还更新了每个页面类以具有ViewModel属性,例如:

public sealed partial class LoginPage : Page
{
    private LoginPageViewModel _viewModel;

    public LoginPageViewModel ViewModel => _viewModel ?? (_viewModel = (LoginPageViewModel)DataContext);

    public LoginPage()
    {
        InitializeComponent();
        NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
    }
}

迄今为止,这一直很好,因为我只在视图中使用了 x:Bind ,并且与视图模型的绑定起作用。自从我安装了Template 10验证包后,我已经更新了一些视图,以使用旧的 Binding 方法,例如:

<validate:ControlWrapper PropertyName="Password">
            <TextBox x:Name="Password" 
                 HorizontalAlignment="Left"
                 Margin="10,220,0,0" 
                 TextWrapping="Wrap"
                 Text="{Binding ViewModel.LoginModel.Password, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                 VerticalAlignment="Top"
                 Width="{StaticResource FieldWidth}"
                 Height="60" 
                 PlaceholderText="Password" 
                 FontSize="24" 
                 InputScope="Password">
                <Interactivity:Interaction.Behaviors>
                    <Core:EventTriggerBehavior>
                        <Behaviors:FocusAction />
                    </Core:EventTriggerBehavior>
                </Interactivity:Interaction.Behaviors>
            </TextBox>
        </validate:ControlWrapper>

我遇到的问题是文本绑定 Text="{Binding ViewModel.LoginModel.Password, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 无法正常工作,并显示错误 Cannot resolve symbol ViewModel due to unknown DataContext
由于我对UWP不熟悉,我认为我缺少一些必要的配置,以确保DataContext设置为正确的ViewModel。我尝试在 app.xaml.cs 构造函数中添加 DataContext = this ,但这并没有起作用。
请问我缺少了哪个部分?
1个回答

3

查看此处的新 x:Bind 和旧 Binding 之间的区别 difference-between-binding-and-xbind。根据错误消息,旧的绑定在页面的 DataContext 上寻找一个名为 "ViewModel" 的属性。但是 DataContext 的类型是 "LoginPageViewModel",具有属性 "LoginModel"?所以如果我没错的话,需要将文本绑定更改为以下内容:

Text="{Binding LoginModel.Password, Mode=...

我认为这应该是引导您朝正确方向前进的好开始;)
另外,学习和理解旧绑定和新绑定之间的区别也很有帮助:深入了解数据绑定

这正是我需要让它工作的提示。按照您建议的设置绑定已经起作用了。我也会进行更深入的阅读。现在要找出为什么代码中设置的验证错误没有显示在视图中。感谢您的帮助。 - Steve
1
@Steve 很高兴能帮到你。通常问题/问题是阅读、学习和深入了解发生了什么以及为什么不起作用的好开始。 - 1ppCH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接