【问题标题】:Xamarin not finding x:Name on XAMLXamarin 在 XAML 上找不到 x:Name
【发布时间】:2020-03-12 18:04:24
【问题描述】:

在我的 Xamarin 项目中,我在 MainPage.cs 上查找 x:Name 时遇到问题...

这是我的名为 MainWindowViewModel 的类(真正应该重命名的小应用程序)

private string productName { get; set; }
        public string ProductName
        {
            get => productName;
            set
            {
                productName = value;
                OnPropertyChanged("ProductName");
            }
        }

是我的 MainPage.xaml 代码,因此 ProductName 绑定到输入框之一(如下)

<Entry Grid.Row="8"
               x:Name="productNameEntry"
               Grid.Column="2"
               Grid.ColumnSpan="3"
               Grid.RowSpan="2"
               WidthRequest="120"
               VerticalOptions="Center"
               HorizontalOptions="End"
               Text="{Binding ProductName}"
               Margin="0,0,45,0" />

这是我目前在 MainPage.cs 中的内容

void SaveButton_Clicked(object sender, System.EventArgs e)
        {
            MainWindowViewModel APR = new MainWindowViewModel()
            {
                ProductName = productNameEntry,

            };

我目前有一个“productNameEntry”下划线,并显示该名称在当前上下文中不存在的错误。

【问题讨论】:

  • a) ProductName = productNameEntry 无效 - 您正在尝试将 UI 元素分配给字符串变量,b) 如果您使用数据绑定,则不需要手动分配值,c) 尝试重新启动 VS、清理解决方案等以修复奇怪的 XAML 问题,d) 这与 SQLite 有什么关系?

标签: c# xamarin xamarin.forms


【解决方案1】:

实际上,只要你的表单/窗口有,你的绑定应该很好用

DataContext = {Binding ToYourViewModel}

然后,文本绑定到 {Binding ProductName} 的数据输入文本框会自动处理输入并直接推送回您的视图模型。它是 WPF 中 .NET 绑定背后的魔力。您不需要知道视图模型中的控件名称。您所关心的只是在您的视图模型上公开公共属性。您视图中的绑定将查找同名的属性。如果找到它,它将自动来回传递,无论您是从 SQL 读取并放入公共属性,还是从用户从屏幕输入的任何内容中读取它。

只是为了测试,在您的表单开始之前,只需设置

ProductName = "some test value";

然后运行您的表单。您应该看到上面的测试值。如果不能,则绑定不正确。更正后,将表单中的值更改为其他任何值,然后单击按钮。在按钮单击事件处理程序方法中,在方法的第一行放置一个断点以暂停程序并查看 ProductName 的值……它应该自动是您输入的任何内容。

【讨论】:

    【解决方案2】:

    您必须通过添加 .Text 来获取 UI 元素中给出的字符串值 使用:ProductName = productNameEntry.Text

    但建议使用命令,因为您已将 Text 属性绑定到您的视图模型

    【讨论】:

    • 我也对 SQLite 的来源感到困惑。
    • 他正在使用 MVVM,因此他不需要手动分配值,并且他已经在其上绑定了 ProductName
    • @RyanMotal 这就是我被卡住的地方,我收到一条错误消息,说 ProductName = productNameEntry 在当前上下文中不存在该名称。显然它可以找到 ProductName 但找不到 productNameEntry。你说的就是我想做的。我的示例基于保存例程,因此当单击保存按钮时,它将使用 SQLite 将其存储在本地。
    • 这很奇怪,可能是一个奇怪的 xaml 问题,通常在我有一个未保存的 .xaml 文件时出现。你试过重启清理重建吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多