Xaml 绑定无法在模板 10 应用程序中看到 ViewModel
Xaml Binding cannot see ViewModel in Template 10 app
我正在使用最新的 Template 10 VS 扩展来创建 UWP Windows 10 移动应用程序。
我已经更新了模板以使用 IOC (Autofac),因此 ViewModels 在 app.xaml.cs
覆盖的 INavigable ResolveForPage(Page page, NavigationService)
方法中得到解析。
我还更新了页面 类,每个页面都有一个 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
,并且可以绑定到视图模型。自从我安装了模板 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
但这没有用。
谁能告诉我我漏掉了拼图的哪一部分?
在此处查看新 x:Bind 和旧 Binding 之间的区别。根据错误消息,旧绑定正在页面的 DataContext 上寻找名为 "ViewModel" 的 属性。但是 DataContext 的类型是 "LoginPageViewModel" 和 属性 "LoginModel"?因此,如果我是对的,您需要将文本绑定更改为
Text="{Binding LoginModel.Password, Mode=...
我认为这应该是一个良好的开端,可以引导您朝着正确的方向前进;)
也有助于学习和理解新旧绑定之间的区别:data-binding-in-depth
我正在使用最新的 Template 10 VS 扩展来创建 UWP Windows 10 移动应用程序。
我已经更新了模板以使用 IOC (Autofac),因此 ViewModels 在 app.xaml.cs
覆盖的 INavigable ResolveForPage(Page page, NavigationService)
方法中得到解析。
我还更新了页面 类,每个页面都有一个 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
,并且可以绑定到视图模型。自从我安装了模板 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
但这没有用。
谁能告诉我我漏掉了拼图的哪一部分?
在此处查看新 x:Bind 和旧 Binding
Text="{Binding LoginModel.Password, Mode=...
我认为这应该是一个良好的开端,可以引导您朝着正确的方向前进;)
也有助于学习和理解新旧绑定之间的区别:data-binding-in-depth