【发布时间】:2019-11-27 18:06:08
【问题描述】:
我对 Xamarin 开发有些陌生。尝试完成一个相当简单的任务:在 XAML 中,将菜单页面数据绑定到一个 ViewModel,该 ViewModel 被注入到我的菜单页面中。
这就是我的 XAML 的样子。 Intellisense 识别 _viewModel 并在 ListView 中进一步显示其属性
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
BindingContext="{x:Reference_viewModel}"
x:Class="SFC.Cliente.Mobile.Views.MenuPage"
x:Name="Menu"
Title="Menu">
<StackLayout VerticalOptions="FillAndExpand">
<ListView x:Name="ListViewMenu" HasUnevenRows="True" ItemsSource="{Binding MenuItems}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Padding="10">
<Label Text="{Binding Title}" FontSize="20"/>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
我的代码如下所示。 ViewModel 被注入到页面的代码隐藏中没有问题并且不为空
namespace SFC.Client.Mobile.Views
{
// Learn more about making custom code visible in the Xamarin.Forms previewer
// by visiting https://aka.ms/xamarinforms-previewer
[DesignTimeVisible(visible:false)]
public partial class MenuPage : ContentPage
{
// ReSharper disable once PrivateFieldCanBeConvertedToLocalVariable
private readonly MenuItemsViewModel _viewModel;
public MenuPage(MenuItemsViewModel viewModel)
{
_viewModel = viewModel;
InitializeComponent();
ListViewMenu.ItemSelected += async (sender, e) =>
{
if (e.SelectedItem == null)
return;
var id = ((HomeMenuItem) e.SelectedItem).Id;
var rootPage = (MainPage) Application.Current.MainPage;
await rootPage.NavigateFromMenu(id);
};
}
}
}
这是我在 InitializeComponent() 期间遇到的异常。我想通过 XAML 连接数据绑定,而不是通过代码。我尝试将 _viewModel 设为公共或私有、财产或成员:没有变化。我做错了什么?
{System.Collections.ListDictionaryInternal}
-2146233088
(空)
(空)
"位置 7:14。找不到_viewModel引用的对象"
"Xamarin.Forms.Xaml"
" 在 Xamarin.Forms.Xaml.Reference.ProvideValue(System.IServiceProvider serviceProvider) [0..."
{System.Reflection.MonoMethod}
【问题讨论】:
-
为什么是图片而不是代码?
-
因为即使使用 Ctrl-K,SO 也不允许我通过 XAML,所以我放弃了尝试理解原因并粘贴屏幕截图 :) 过去 2 天我一直在处理这个问题并阅读每篇数据绑定文章并观看每一个视频......沮丧
-
@Igorek 也许Set BindingContext to ViewModel 的帖子有用吗?
-
我已经编辑了问题以删除图像并将它们放入文本中。每个人的数据都会很高兴。
-
您应该能够将页面的 BindingContext 投射到您的虚拟机
标签: c# xaml xamarin mvvm xamarin.forms