Xamarin 表单从可绑定属性更新视图模型字段

2024-04-19

我觉得我错过了一些非常明显的东西。我有一个自定义控件,它有一个视图模型,其中包含一堆字段,但此示例中最重要的是文本值。我可以使用自定义控件 XAML 中的以下内容非常轻松地绑定到它。

<Label Text="{Binding Text}" />

我想将其公开给任何调用此自定义控件的东西。据我所知,这需要使用可绑定属性

public static readonly BindableProperty TextProperty = BindableProperty.Create(propertyName: nameof(Text)
                                                               , returnType: typeof(string)
                                                               , declaringType: typeof(CustomControl));
public string Text
{
    get
    {
        return GetValue(TextProperty).ToString();
    }
    set
    {
        SetValue(TextProperty, value);
    }
}

这有效。问题是,当我已经有了视图的视图模型但看不到从可绑定属性到视图模型字段的方法时,我不想绑定到视图代码中的某些内容。

我首先尝试使用可绑定属性的属性更改事件,但这必须是静态的,因此它无法访问控件视图模型/绑定上下文。我尝试在“文本”字段上使用该集,但这些似乎实际上并未被调用。这些都不起作用,并且在代码后面有一个文本字段纯粹是为了更新视图模型中的字段似乎效率低下

Edit:只是为了尝试进一步解释, 我有一个带有视图模型的页面

我有一个自定义控件,它的 xaml 绑定到视图模型

自定义控件在页面上使用如下

<ctrl:CustomControl Text="{Binding ControlText}"/>

目前,这会将自定义控件代码中的文本依赖属性和支持字段正确设置为页面视图模型 ControlText 的内容。

相反,我希望它在自定义控件视图模型上设置文本字段并触发 viewmodels 属性更改事件。

所以基本上它会去 PageVM.ControlText --> CustomControlVM.Text


我制作了一个具有可绑定属性的自定义控件。如果要对 BindableProperty 更改执行操作,则需要附加到其属性更改事件之一。你错过了PropertyChanged您的代码中的事件。

我的自定义控件:

<StackLayout>
        <Label x:Name="Title" BackgroundColor="Red" TextColor="White" HeightRequest="60" Text="A"/>
        <Label BackgroundColor="Green" TextColor="Black" HeightRequest="60" Text="B"></Label>
    </StackLayout>

可绑定属性:

private string _text;
    public string Text
    {
        get { return _text; }
        set
        {
            _text = value;
            OnPropertyChanged();
        }
    }
    public static readonly BindableProperty TextProperty = BindableProperty.Create(
             nameof(Text),
             typeof(string),
             typeof(MyCustomControl),
             string.Empty,
             propertyChanged: (bindable, oldValue, newValue) =>
             {
                 var control = bindable as MyCustomControl;
                 //var changingFrom = oldValue as string;
                 //var changingTo = newValue as string;
                 control.Title.Text = newValue.ToString(); //Title is the name of the label which I want to change the Text.
             });

视图模型:

public class ViewModel
{
    public string Text { get; set; }
}

我对自定义控件的使用:请不要忘记添加本地引用。

<local1:MyCustomControl Text="{Binding Text}"></local1:MyCustomControl>

Binding:

ViewModel viewModel = new ViewModel();
        viewModel.Text = "hello, ";
        this.BindingContext = viewModel;

Result: enter image description here

您可以从 GitHUb 上的 MyCustomControl 文件夹下载源文件以供参考。https://github.com/WendyZang/Test.git https://github.com/WendyZang/Test.git

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

Xamarin 表单从可绑定属性更新视图模型字段 的相关文章

  • 如何在MVVM架构中将animationview play与LottieForms绑定?

    所以我在列表视图中处理动画 并且我想随时播放一次 所以我想控制它 这是图书馆https github com martijn00 LottieXamarin https github com martijn00 LottieXamarin
  • 如何在 Visual Studio 2019 中创建 xamarin PCL 项目

    在 VS 2019 中创建新的 xamarin 项目时 我没有 PCL 项目的选项 我得到如图所示的选项 我运行旧的 PCL 项目 它运行成功 请帮我在 VS 2019 中创建 PCL 项目 可移植类库 PCL are 已弃用在最新版本的
  • 忽略 Xamarin.Forms (PCL) 中的 SSL 证书错误

    有没有办法做类似这里描述的事情 https stackoverflow com a 2675183 https stackoverflow com a 2675183但在 Xamarin Forms PCL 应用程序中 我正在使用 Http
  • 在 Xamarin Studio for Mac 上添加 NuGet 包不起作用

    我已经尝试搜索这个问题 并且我遇到了许多人们无法添加 NuGet 包的问题 但没有发现任何可以解决我的问题的方法 我正在使用 Xamarin Studio for Mac 并尝试将 SQLite 包添加到我的 Xamarin Forms 项
  • 如何在 Xamarin Forms 中对列表进行分组?

    我需要将下面的列表以 xamarin 形式与公司名称进行分组并需要在 ListView 中显示 我研究过 ObservableCollection 是可能的 但我不知道该怎么做 任何人都可以帮助实现这一目标吗 List public cla
  • 应用程序被终止时无法处理 FCM 消息

    我一直在阅读各种教程 其他 SO 线程以及官方 Android 开发人员和 Firebase 文档 但无济于事 我已经尝试了几乎所有的方法 但我已经耗尽了精力和时间 因为我正在修复以前可以工作但现在不再工作的通知系统 我正在使用 Azure
  • 使用 Xamarin 和 Azure AD B2C 设置自定义选项卡的样式

    我效仿了验证示例 https developer xamarin com samples xamarin forms WebServices TodoAzureAuthADB2CClientFlow 将自定义 Chrome 选项卡与 Azu
  • 无法在 UWP 中调试 .NET Standard 2.0 DLL

    我创建了一个新的 Xamarin Forms 解决方案 升级了所有 NuGet 确保 UWP 版本的目标版本为 16299 并确保 NET Standard 项目的目标版本为 2 0 我运行了该项目并能够很好地调试 NET Standard
  • 如何在 xamarin.forms 中隐藏列表视图的空行

    我有一个StackLayout with a ListView我有一个添加按钮 我想将其显示在ListView 但是ListView显示许多未使用的行 只是空行 这迫使我的按钮显示在页面底部 我一直在搞乱VerticalOptions一整天
  • 目标“MonoAndroid,版本= v6.0”项目依赖项

    我的 Visual studio 2017 nuget 包无法安装 Xamarin Forms 可移植类库项目中出现以下错误 严重性代码 说明 项目文件行抑制状态 错误无法安装包 Xamarin Android Support Compat
  • 使用 SSL 的 Xamarin.Forms Image.Source

    我正在使用一个在线商店来存储通过我们的应用程序上传的用户图像 并受 SSL 保护 上传工作一切顺利 因为我使用的是带有附加证书的 WebClient 但是当我尝试使用 Xamarin Forms Image 组件时 例如将源设置为 http
  • Xamarin Dim 页面(主详细信息页面)

    因此 对于 Android 当显示主从页面的母版页时 母版页会被 黑色暗淡 视图覆盖 因此很容易用眼睛区分这两个页面 在 iOS 中 详细信息页面不会变暗 因此更难区分视图 有没有办法用 黑色半透明 的 BoxView 或 Frame 覆盖
  • 如何确定 Xamarin Forms 中点击的位置?

    在 Xamarin Forms 中 如何找出点击的位置 例如在图像内 我的代码是 var tapGestureRecognizer new TapGestureRecognizer tapGestureRecognizer Tapped O
  • NSTable行点击事件

    我正在开发 Xamarin Mac 应用程序 目前正在创建新闻源列表 我想要的是 当用户单击其中一行时 我会执行一些操作 打开浏览器并显示完整的故事 这是我的自定义单元格 行 的样子 public class CustomLatestNew
  • Xamarin Forms WebView 打开外部链接

    我的应用程序中有一个网络视图 当单击外部链接 在普通浏览器中在新选项卡中打开 时 我无法返回我的网站 当打开一个新标签时 有可能像 Gmail 一样关闭该标签的菜单吗 目的是 每当单击链接时 用户都可以选择使用哪个选项来查看内容 例如单击链
  • 在 Xamarin 中获取 OutOfMemoryException

    java lang OutOfMemoryError 考虑增加 JavaMaximumHeapSize Java 执行时内存不足 java exe 我的 Visualstudio Xamarin 项目出现内存不足异常 请帮助我如何解决此问题
  • 未选择为此解决方案配置构建项目

    错误 gt Skipped Deploy Project DrawShape Android Configuration Debug Any CPU gt Project not selected to build for this sol
  • 将 C# Xamarin.forms.image 转换为 CGImage

    我正在尝试将 Xamarin forms image 转换为 CoreGraphics CGImage void saveImg Xamarin Forms Image image CoreGraphics CGImage CGImage
  • 如何在 Visual Studio for Mac 上开发 Windows 应用程序

    我最近购买了一台iMac 以便在更好的环境中在Visual Studio for Mac上开发我的应用程序 Windows上有很多问题 但是在Visual Studio for mac上 没有UWP项目 据了解 我必须创建一个新的 NET
  • 在 Xamarin 中隐藏软键盘

    如何隐藏软键盘以便在聚焦时显示Entry在 Xamarin forms 便携式表单项目中 我假设我们必须为此编写特定于平台的渲染器 但以下内容不起作用 我创建自己的条目子类 public class MyExtendedEntry Entr

随机推荐

  • 预计结构位于 的左侧。或 .* 但它是一个结构

    我收到编译错误structure required on left side of or on chest contents 0 but chest是一个结构 class Item public int id int dmg class C
  • 将JSON键值对绑定到polymer dart中的表模板

    如何以聚合物表示法绑定到 json 对象内的键 值对 我有模板重复 jsonarray中的对象 我想布置一个表格 假设每个对象有 1 一 2 二 3 三 就像是
  • Python 线程模块导入失败

    我正在尝试导入线程模块 但是 我似乎只是无缘无故地收到了错误 这是我的代码 import threading class TheThread threading Thread def run self print Insert some t
  • 是否可以引用 styles.xml 文件中的属性?

    我想让用户能够切换整个应用程序的颜色皮肤 我的意思是当用户按下屏幕上的按钮时动态切换应用程序的某些自定义视图的样式 我知道如果你打电话Activity setTheme before onCreate 方法 您可以动态更改应用程序的主题 但
  • 循环调用lambdaify,避免显式调用

    我有这个代码 var a b c arr np array 1 2 3 4 5 6 7 8 9 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 y np hsplit arr len var newdict for
  • Django,如果使用原始 SQL,我应该采取哪些步骤来避免 SQL 注入攻击?

    我读到 ORM 应该最大限度地减少 SQL 注入攻击的可能性 然而在 Django 中 有时 ORM 受到一定限制 我需要使用原始 SQL 我应该采取哪些步骤来避免 SQL 注入攻击 目前我知道检查查询字符串中的分号 但除此之外就不知道了
  • 通过ARM模板提供经典云服务

    在我们的一个项目中 我们正在尝试在 Azure 上自动部署云组件 对于大多数组件 基本上所有 ARM 组件 如 Redis 服务总线 应用服务等 我们能够使用 ARM 模板和 Powershell 脚本来实现它 然而 我们却陷入了困境云服务
  • List.filter 中的下划线

    为什么这不起作用 List true false filter size 错误说
  • Ruby:未初始化常量 Log4r::DEBUG (NameError) 问题

    使用时log4r在 Ruby 中 我编写了一个类似于以下内容的配置文件 require rubygems require log4r require log4r outputter datefileoutputter SERVICE LOG
  • 单例模式 - 早期绑定(涉及静态变量)是否会减少互斥锁的需要?

    他们说早期绑定解决了同步问题 我无法理解 如何 这是 Java 的特殊之处还是 C 也同样适用 那么 使用这种方法我们实际上不需要互斥锁 JVM 确保每个类都已完全加载 然后才允许通过其他线程对其进行任何访问 这意味着所有静态变量 包括un
  • 发送一系列命令并等待响应

    我必须更新连接到串行端口的设备上的固件和设置 由于这是通过一系列命令完成的 因此我发送命令并等待收到答案 在答案 多行 中 我搜索一个字符串 该字符串指示操作是否成功完成 Serial gt write boot 1000 Serial g
  • C# 中的图像处理库[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 从哪里可以获得 C Net 中的图像处理库 edit 在这里查看列表https github com quozd awesome dotn
  • 使用 ConcurrentHashMap 避免空指针异常

    我知道这个问题已被问过多次 但我没有找到该问题的正确答案 从 ConcurrentHashMap 获取结果时如何避免抛出 NullPointerException 我有下面的代码 它向我抛出一个空指针 public static Strin
  • Python C Api 将 PyObject * 传输到 c 数组中

    我使用 python c api 并希望从 python 返回一个数组 我从 python 端返回了一个 python 数组 并希望将 PyObject 结果传输到一个 c 数组中 以便我可以使用它 我能做到吗 附带问题 在什么情况下尝试返
  • Objective C 中 NSArray、NSDictionary 等类的可变和不可变版本背后的逻辑是什么?

    为什么 Objective C 中常见的集合类 如 NSString NSArray NSDictionary 等 有可变版本和不可变版本 分别定义它们背后的逻辑是什么 性能 内存管理还是其他什么 类的不可变版本之所以存在 是因为不可变对象
  • Ruby 访问哈希元素

    我有以下哈希 title gt ga browser Firefox dimensions gt browser gt Firefox metrics gt pageviews gt 25474 id gt http www google
  • navigator.language 所有语言的列表

    我在哪里可以看到语言及其代码列表 我想比较语言并在模板中自动选择所需的语言 它们跨浏览器相同吗 还有其他解决方案吗 出于复制和粘贴目的 af af NA af ZA agq agq CM ak ak GH am am ET ar ar 00
  • 如何在 gdb 上进行 grep 打印

    有没有办法在 gdb 中 grep 打印命令的输出 就我而言 我正在使用 gdb 调试核心转储 并且我正在调试的对象包含大量元素 我发现很难寻找匹配的属性 即 gdb print this grep
  • Java Collat​​or 与 MySQL 的 utf8_general_ci 排序规则具有相似的特性

    有没有Collator与MySQL的utf8 general ci具有相同特征的实现 我需要一个不区分大小写的整理器不区分德语元音变音如 与元音a 背景 我们最近遇到了一个错误 该错误是由表中的错误排序规则引起的 使用的排序规则是utf8
  • Xamarin 表单从可绑定属性更新视图模型字段

    我觉得我错过了一些非常明显的东西 我有一个自定义控件 它有一个视图模型 其中包含一堆字段 但此示例中最重要的是文本值 我可以使用自定义控件 XAML 中的以下内容非常轻松地绑定到它