Xamarin - 将命令绑定到用户控件内对象的属性

2023-11-26

几天前我开始学习 XAML,但我很难解决这个问题。

在 Xamarin Forms 中,我想创建一个用户控件,其中包含一个标签和一个按钮,并且能够从使用我的用户控件的另一个页面将命令绑定到 XAML 中的用户控件。

我目前遇到异常:

Xamarin.Forms.Xaml.XamlParseException:'位置 8:24。无法分配属性“Test1”:属性不存在,或不可分配,或值和属性之间的类型不匹配'

这是我目前正在尝试开始工作的简化版本。

我的自定义控件 XAML

<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="App3.Controls.Control1">
    <StackLayout>
        <Button Command="{Binding Test1}" Text="Test"/>
    </StackLayout>
</ContentView>

使用我的自定义控件 XAML 进行控制

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:App3"
             xmlns:controls="clr-namespace:App3.Controls"
             x:Class="App3.MainPage">

    <controls:Control1 Test1="{Binding Test2}" />
</ContentPage>

我的自定义控件隐藏代码

using System.Windows.Input;
using Xamarin.Forms;

namespace App3.Controls
{
    public partial class Control1 : ContentView
    {

        private static readonly BindableProperty controlProperty = BindableProperty.Create("Test1", typeof(ICommand), typeof(Control1), null);

        public Control1()
        {
            InitializeComponent();
        }

        public ICommand Test1
        {
            get
            {
                return (ICommand)GetValue(controlProperty);
            }
            set
            {
                SetValue(controlProperty, value);
            }
        }

    }
}

使用自定义控件查看页面模型

using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Input;
using Xamarin.Forms;

namespace App3
{
    public class MainPageViewModel : INotifyPropertyChanged
    {
        public MainPageViewModel()
        {
            this.Test2 = new Command(test);
        }

        public void test()
        {
            Application.Current.MainPage.DisplayAlert("it works", "it works", "it works");
        }

        public ICommand Test2
        {
            get; set;
        }

        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

如果您希望从 Xaml 中检测到 BindableProperty 并使其可绑定,则需要遵循一些命名约定:

创建标识符字段时,请使用注册时的属性名称以及后缀 Property 来命名该字段。该字段是依赖项属性的标识符,稍后将用作您将在包装器中进行的 SetValue 和 GetValue 调用的输入,通过您自己的代码或任何外部代码访问对该属性的任何其他代码访问您允许,通过属性系统,也可能通过 XAML 处理器。

and

将 DependencyProperty 标识符定义为所有者类型上的公共静态只读字段。

(这是 DependencyProperty 的文档,但在本例中它非常适用于 BindableProperties。请参阅https://msdn.microsoft.com/en-us/library/ms753358(v=vs.110).aspx)

您可以通过替换来修复代码

private static readonly BindableProperty controlProperty = BindableProperty.Create("Test1", typeof(ICommand), typeof(Control1), null);

public ICommand Test1
{
    get { return (ICommand)GetValue(controlProperty); }
    set { SetValue(controlProperty, value); }
}

by

public static readonly BindableProperty Test1Property = BindableProperty.Create("Test1", typeof(ICommand), typeof(Control1), null);


public ICommand Test1
{
    get { return (ICommand)GetValue(Test1Property); }
    set { SetValue(Test1Property, value); }
}

这应该可以防止财产检测问题。

为了让你的全部功能正常工作,按钮命令绑定应该将其源设置为控件本身,并且你应该设置你的MainPageViewModel as BindingContext for MainPage.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xamarin - 将命令绑定到用户控件内对象的属性 的相关文章

  • 用 C++ 进行服装建模 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一些软件 最终会绘制一个人体框架 可以配置各种参数 并且计划是在假人身上放置某种衣服 我研究
  • XAML:如何定义要在多个项目中使用的数据模板和样式

    我开始使用 WPF net 3 5 sp1 仅使用 VS 尚未混合 开发桌面应用程序 我现在的情况是 我在几个库中有一些通用的可重用组件 我可以在哪里定义样式和数据模板 以便它们可以在多个项目中重复使用 从而获得一致的外观和感觉 我看过 R
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • 私有模板函数

    我有一堂课 C h class C private template
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • VM 初始化期间发生错误无法为对象堆保留足够的空间无法创建 Java 虚拟机

    我一个多月以来一直面临这个问题 这是我在命令行运行java时看到的 java Xmx1300m Error occurred during initialization of VM Could not reserve enough spac
  • 是否有一种直接的方法来停止服务以响应用户单击通知?

    我想要以下行为 用户单击通知 Android 停止我的服务 问题是停止服务需要调用 stopService 而我无法轻松创建执行此操作的 PendingIntent 因此 我发现做到这一点的唯一方法是让我的服务接收一个特殊的 Intent
  • C++ 和 QML 之间的通信

    This page展示如何从 QML 中调用 C 函数 我想做的是通过 C 函数更改按钮上的图像 触发状态更改或无论如何完成 我怎样才能实现这个目标 UPDATE 我尝试了 Radon 的方法 但是当我插入这一行时立即 QObject te
  • 如何将 System.Windows.Media.SolidcolorBrush 转换为 System.Drawing.Color?

    我需要在 C 中将 System Windows Media SolidcolorBrush 转换为 System Drawing Color 任何线索都会很好 您可以使用SolidColorBrush Color获取或设置颜色 这是一个S
  • Spring Boot 的 CORS 问题

    我有一个在端口 8443 上运行的 Spring Boot 应用程序 以及在端口 8080 上运行的基于 angular2 的前端 我需要我的前端向我的 Spring 服务器发出请求 但我左右都收到 CORS 错误 我已经添加了 Cross
  • linux file命令输出中的版本号字段是什么

    如果我对在 Fedora Core 11 上编译的名为 version 的可执行文件执行以下命令 我会得到以下输出 文件版本 版本 ELF 32 位 LSB 可执行文件 Intel 80386 版本 1 SYSV 动态链接 使用共享库 适用
  • 用于目录遍历的任务并行库

    我想遍历硬盘上的目录并在所有文件中搜索特定的搜索字符串 这听起来像是可以 或应该 并行完成的事情的完美候选者 因为 IO 相当慢 传统上 我会编写一个递归函数来查找并处理当前目录中的所有文件 然后递归到该目录中的所有目录 我想知道如何修改它
  • 使用 XSD 验证 XML

    我在验证 XML 时遇到了真正的困难XSD 我应该在所有这些前面加上前缀 并预先声明 我是 XSD 和验证的新手 所以我不确定这是代码问题还是 XML 问题 我经历过 XML API 的地狱 并带着无数不同的选项回来 我认为我已经找到了使用
  • 防止基类的序列化

    我觉得我应该知道这一点 但出于某种原因 序列化从 可能是抽象 基类派生的类而不必一直序列化到树上的首选方法是什么 例如 也许您无法控制派生的类 但希望使用序列化来克隆您的对象 仅克隆您的对象 而不是基础对象 例如 This is a bas
  • 如何在 bash 脚本的批处理文件的参数中包含管道字符?

    我有一个 shell 脚本 我想执行这一行 qtvars bat vsstart qt sln BUILD Debug Win32 This works fine though I had to modify qtvars bat but
  • 如何模拟低带宽、高延迟环境? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我需要模拟与服务器的低带宽 高延迟连接 以便模拟远程站点的 VPN 条件 带宽和延迟应该是可调整的 这样我就可以找到运行我们的软件包的最佳组合 For macOS there i
  • 自定义 git 命令自动完成

    我通过编写位于以下位置的 shell 脚本实现了自定义 git 命令 usr local bin 它工作正常 但我希望脚本在命令行中自动完成分支 就像git checkout TAB TAB 这怎么可能做到呢 编辑 只需添加一些上下文 gi
  • 在 Rust 中对字符串进行分区

    Rust 中是否有一种机制可以将字符串划分为等长度元素的列表 子字符串或元组 字符数组 我想要一个字符串 abcdefghijkl 并将其分成一个列表 例如 ab cd ef gh ij kl 我不需要手动查看执行此操作的方法 我只是想知道
  • python:如何从 HKLM 中删除注册表项(和子项)(出现错误 5)

    我正在尝试通过 python 脚本删除某些注册表项 我从 HKEY CURRENT USER 读取和删除键没有问题 但尝试从 HKEY LOCAL MACHINE 执行相同操作 给我带来了可怕的WindowsError 错误 5 访问被拒绝
  • 在自定义视图/uiview子类上实现iphone的复制/粘贴控件

    我承认 在 S O 上已经有一个完全符合这些思路的问题 但它缺乏实现细节 有效的答案 而且我想更具体 所以我认为应该提出一个新问题 显然 如果我错了 请告诉我 我们可以尝试重新启动那里的线程 基本上 当用户按住标签时 我想将 UILabel
  • 通过 HTTPS 使用 Web 服务时抛出 System.Net.WebException

    当使用 HTTPS 调用服务器上运行的 Web 服务时 我的应用程序抛出 System Net WebException 并显示消息 底层连接已关闭 无法与远程服务器建立信任关系 我不确定如何解决此问题并成功拨打电话 经过一番研究 我发现了
  • gcc: printf 和 long double 会导致错误的输出。 [C - 类型转换混乱]

    我对 C 相当陌生 我尝试为 Vector 编写函数 但一定有问题 这是代码 Defines maths for particles include
  • 使用ant或Eclipse编译时出现多个dex文件错误

    我无法构建我的应用程序 我正在运行今天下载的最新构建工具 这种情况在更新后开始发生 dex dex Converting compiled files and external libraries into Users rob Repos
  • 查看 Maven 工件上的 PGP 签名

    我想手动验证来自 Central 的 Maven 工件上的 PGP 签名 但我不知道从哪里开始 我在 Apache 上看到将工件上传到中央存储库的指南它说 我们要求您为所有工件提供 PGP 签名 我看到 Sonatype 的 Nexus P
  • Xamarin - 将命令绑定到用户控件内对象的属性

    几天前我开始学习 XAML 但我很难解决这个问题 在 Xamarin Forms 中 我想创建一个用户控件 其中包含一个标签和一个按钮 并且能够从使用我的用户控件的另一个页面将命令绑定到 XAML 中的用户控件 我目前遇到异常 Xamari