绑定到 ViewModel 和 CodeBehind 中的属性

2024-04-25

我确信这是一个可笑的无知问题,但无论如何我还是要问这个问题,因为我搜索了又搜索,要么不理解我所看到的解决方案,要么没有找到我所寻求的答案。

我有一个 MVVM 应用程序。我的 XAML 设置为 VM 的 DataContext,其中屏幕上的数据项是从 VM 的属性填充的。我的 CodeBehind 不处理数据,只处理与屏幕相关的内容。

我现在要做的是将某些 UI 元素绑定到 foo.xaml.cs (CodeBehind) 文件中的属性。例如,我想指定 FontSize 绑定到 CB 中的属性,以便在 CB 中的 WindowInitialized 处理程序中,它可以检测屏幕尺寸并更改所有屏幕项的 FontSize= 绑定到的一个变量。

我可以通过在虚拟机中创建公共属性,然后将 CB 中的值“注入”到虚拟机中来解决此问题。我知道这会起作用,但这是获得我想要的行为的一种迂回方式,一点也不简单,而且我确信这是错误的继续方式。

我四处搜寻并尝试过以下方法:

    FontSize="{Binding RelativeSource={RelativeSource Self},Path="MyFontSize"

(其中“MyFontSize”是一个公共 int 属性)和我找到的各种其他示例,但没有一个起作用。

具体来说,如果我的 CodeBehind 类被调用名称更改设置主窗口这就是“MyFontSize”属性所在的地方,

public partial class NameChangeSetupMainWindow : Window
{
    private int m_fontSize = 14;
    public int MyFontSize
    {
        get { return m_fontSize; }
        set
        {
            if (m_fontSize != value))
            {
                m_fontSize = (value > 0) ? value : 10;
            }
        }
    }
    ...
    ... rest of the class...
    ...
}

虚拟机被称为名称更改设置视图模型这就是“真实”数据所在的地方,DataContext 指向 ala:

<Window.DataContext>
    <local:NameChangeSetupViewModel/>
</Window.DataContext>

XAML 中的语法是什么,用于将那些 UI 项(与 UI、字体大小等相关的工具提示)绑定到 CodeBehind 中的变量,而不是将它们存放在 VM 中?

预先感谢您提供的任何指导。


您可以使用RelativeSource AncestorType http://msdn.microsoft.com/en-us/library/system.windows.data.relativesource.ancestortype%28v=vs.110%29.aspx绑定到视图本身的属性:

<TextBlock FontSize="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=MyFontSize}" />

Using ElementName应该也有效:

<Window x:Name="window">

    <TextBlock FontSize="{Binding ElementName=window,Path=MyFontSize}" />
</Window>

Edit

这是我已确认有效的示例:

XAML

<Window x:Class="WpfAbc.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"
    ToolTip="{Binding RelativeSource={RelativeSource Self},Path=MyToolTip}"
    >
    <Grid>
        <TextBlock Text="hello world" FontSize="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=MyFontSize}" />
    </Grid>
</Window>

代码隐藏

public partial class MainWindow : Window
{
    private int m_fontSize = 20;
    public int MyFontSize
    {
        get { return m_fontSize; }
        set
        {
            if (m_fontSize != value)
            {
                m_fontSize = (value > 0) ? value : 10;
            }
        }
    }

    public string MyToolTip
    {
        get { return "hello world"; }
    }

    public MainWindow()
    {
        InitializeComponent();
    }
}

有关此主题的文章:

  • The RelativeSource标记扩展 http://msdn.microsoft.com/en-us/library/ms743599%28v=vs.110%29.aspx
  • XAML 绑定声明 http://msdn.microsoft.com/en-us/library/ms752300%28v=vs.110%29.aspx

相关背景:

  • XAML 中的“名称范围” http://msdn.microsoft.com/en-us/library/ms746659%28v=vs.110%29.aspx(使用“ElementName”绑定到源时,源元素必须位于同一名称范围内)
  • XAML 中的可视化树与逻辑树 http://msdn.microsoft.com/en-us/library/ms753391%28v=vs.110%29.aspx(不在可视化树中的元素,如 Popup 和 ContextMenu,不会继承 DataContext。从这些元素进行绑定需要像“数据上下文间谍” https://stackoverflow.com/a/5647426/1001985技术。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

绑定到 ViewModel 和 CodeBehind 中的属性 的相关文章

  • 分段错误(核心转储)错误

    我的程序编译罚款 但在输入文件时出现 分段错误 核心转储 错误 我没有正确处理 ostream 吗 include
  • 将字节数组转换为托管结构

    更新 这个问题的答案帮助我编写了开源项目GitHub 上的 AlicanC 现代战争 2 工具 https github com AlicanC AlicanC s Modern Warfare 2 Tool 你可以看到我是如何阅读这些数据
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • 如何创建用于 QML 的通用对象模型?

    我想知道是否有任何宏或方法如何将 Qt 模型注册为 QObject 的属性 例如 我有AnimalModel http doc qt io qt 5 qtquick modelviewsdata cppmodels html qabstra
  • 如何使用MySqlCommand和prepare语句进行多行插入?(#C)

    Mysql 给出了如何使用准备语句和 NET 插入行的示例 http dev mysql com doc refman 5 5 en connector net programming prepared html http dev mysq
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • HttpWebRequest vs Webclient(特殊场景)

    我知道这个问题之前已经回答过thread https stackoverflow com questions 1694388 webclient vs httpwebrequest httpwebresponse 但我似乎找不到详细信息 在
  • 两种类型的回发事件

    1 我发现了两篇文章 每篇文章对两种类型的回发事件的分类都略有不同 一位资源说两种类型的回发事件是Changed事件 其中控件实现 IPostbackDataHandler 当数据在回发之间更改时触发 然后Raised事件 其中控件实现 I
  • 从 Code::Blocks 运行程序时出现空白控制台窗口 [重复]

    这个问题在这里已经有答案了 当我尝试在 Code Blocks 中构建并运行新程序时 控制台窗口弹出空白 我必须单击退出按钮才能停止它 它对我尝试过的任何新项目 包括 Hello world 都执行此操作 奇怪的是 它对于我拥有的任何旧项目
  • 从成员函数指针类型生成函子

    我正在尝试简化 通过make fn 预处理参数的函子的生成 通过wrap 对于 arity 的成员函数n 生成函子基本上可以工作 但到目前为止只能通过显式指定成员函数的参数类型来实现 现在我想从它处理的成员函数类型生成正确的函子 struc
  • C# 委托责任链

    为了我的理解目的 我实现了责任链模式 Abstract Base Type public abstract class CustomerServiceDesk protected CustomerServiceDesk nextHandle
  • C# 中的常量和只读? [复制]

    这个问题在这里已经有答案了 可能的重复 const 和 readonly 之间有什么区别 https stackoverflow com questions 55984 what is the difference between cons
  • tabcontrol selectedindex 更改事件未被触发 C#

    嘿伙计们 我有一个很小的问题 请参阅下面的代码 this is main load private void Form1 Load object sender EventArgs e tabAddRemoveOperator Selecte
  • asp.net网格分页的SQL查询

    我在用iBatis and SQLServer 使用偏移量和限制进行分页查询的最佳方法是什么 也许我添加该列ROW NUMBER OVER ORDER BY Id AS RowNum 但这只会阻止简单查询的数据访问 在某些情况下 我使用选择
  • 在 wpf 中隐藏或禁用输入手势文本

    假设我们使用 Ctrl S 输入手势来保存项目 在 文件 菜单 保存 Ctrl S 中显示这样的文本 现在 在 SaveCommand 的 canexecute 上 我检查项目是否需要保存 如果不需要 则禁用 保存 在这种情况下 我会看到类
  • ASP.NET JQuery AJAX POST 返回数据,但在 401 响应内

    我的应用程序中有一个网页 需要调用我设置的 Web 服务来返回对象列表 这个调用是这样设置的 document ready function var response ajax type POST contentType applicati
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 使用 iTextSharp 5.3.3 和 USB 令牌签署 PDF

    我是 iTextSharp 和 StackOverFlow 的新手 我正在尝试使用外部 USB 令牌在 C 中签署 PDF 我尝试使用从互联网上挖掘的以下代码 Org BouncyCastle X509 X509CertificatePar
  • 从 Delphi 调用 C# dll

    我用单一方法编写了 Net 3 5 dll 由Delphi exe调用 不幸的是它不起作用 步骤 1 使用以下代码创建 C 3 5 dll public class MyDllClass public static int MyDllMet
  • 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同

    System Net WebException 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同 在 System Net FtpWebRequest CheckError 在 System Net FtpWebReque

随机推荐

  • 无法从非 EcmaScript 模块导入命名导出“指令”(仅提供默认导出)

    这是我正在开发的一个离子角度项目 我正在使用 ng lazyload image 插件Link https www npmjs com package ng lazyload image 当我开始编译它时显示这样的错误 Error node
  • 使用 phpunit 9.5 捕获警告、通知和弃用

    Quoting https phpunit readthedocs io en 9 5 writing tests for phpunit html testing php errors warnings and notices https
  • 为什么分析使用 1x1 像素?

    导致插件分析使用 1x1 img 像素调用其代码的原因是什么 这个快捷方式有什么权限 托管 1x1px 图像的服务器记录该请求 这允许收集有关谁加载 和呈现 带有图像的页面的统计信息 浏览器通常允许 img 标签中的跨源 此外 这还允许从与
  • Scala:抽象类型模式 A 未被选中,因为它已被擦除消除

    我正在编写只能捕获特定类型异常的函数 def myFunc A lt Exception try println Hello world or something else catch case a A gt warning abstrac
  • 如何在 Windows 7 上安装 ROracle 软件包?

    我正在尝试在 Windows 7 客户端上安装 ROracle 包 我安装了 Oracle Instant 客户端和 Rtools 安装了 DBI 包 设置了 OCI32 LIB 环境变量 但是当我尝试从命令行安装时 C Temp gt R
  • 按组手动填充多个比例的geom_tile

    I have the following current output 我的目标是像这样的着色 但只填充到最大级别 例如填充停止在当前级别 创建此数据的数据是 df lt tribble Question Code RespondentLe
  • 如何让react中所有可折叠项默认打开?

    我使用reactstrap制作了一个带有令牌的可折叠按钮 并且按钮单击折叠一切正常 我希望保持这种情况 但另一方面 我如何修改它以使所有可折叠按钮在页面初始渲染时打开 访问页面时 所有令牌都需要可见 这意味着所有可折叠项目都需要打开 如果我
  • java 8后具有多个选择的联合查询

    这是我想在 MySQL 中尝试的一个查询 SELECT A x FROM A WHERE A y P UNION SELECT A x FROM A WHERE A y Q 上面是我正在尝试的原始查询的精简版 简单得多的版本 在我原来的查询
  • 从 Android 中的纬度和经度获取城市名称提供的服务不可用 Android 4.0.3?

    我在应用程序中使用的是Android 4 0 3版本 现在我想获取城市名称或其他信息LATITUDE and 经度但当我运行应用程序时 显示服务不可用 Logcat 01 10 13 58 29 279 W System err 1211
  • Twitter Bootstrap Collapse 插件方向 - 水平而不是垂直

    有没有办法从水平方向而不是垂直方向折叠 Bootstrap Collapse 插件 看看代码 这种能力似乎没有内置 但我希望我只是错过了一些东西 任何帮助将不胜感激 谢谢 我想出了如何在不修改或添加任何 JavaScript 的情况下非常轻
  • 自定义 jquery 验证和不显眼的 JavaScript

    我正在尝试编写一个自定义验证 如果在提交表单时文本区域中存在 html 则会给出错误 我有以下内容 它不起作用 我不知道为什么 我也不明白不引人注目的部分 有人可以告诉我如何做到这一点 因为我看到其他有它的例子 文本区域有一个类 note
  • 使用 Polyfit 进行垂直线拟合

    这只是一个基本问题 我正在使用拟合线来分散点polyfit 在某些情况下 我的散点具有相同的 X 值并且polyfit无法在其上放置一条线 必须有某种东西可以处理这种情况 毕竟 它只是一个线配合 我可以尝试交换 X 和 Y 然后再画一条线
  • 在 Perl eval 中捕获变量赋值

    我希望能够从 Perl eval 捕获变量赋值 也就是说 确定代码中分配给哪些变量名称并提取它们的值 例如 如果我运行 eval foo 42 bar 3 14 eval 的结果是 3 14 最后评估的值 但我还希望能够确定名称 foo 和
  • 使用 htmlAttributes 正确制作 ActionLink 扩展

    我为我的 ActionLink 使用自定义扩展 我添加了一个属性data url这意味着被翻译成一个属性data url 即用破折号替换下划线 这是使用我的自定义扩展的链接 1 Ajax ActionLink Add MyRoutes Ge
  • 带变量的 ansible regex_search

    如何在ansible playbook中使用正则表达式查找匹配项 其中变量出现在regex search争论 以下剧本在使用以下命令运行时找不到匹配项 ansible playbook playbook yml hosts localhos
  • 程序崩溃后取消警报

    我有一个后台服务 它设置重复警报 执行其任务并自行停止 然后 当闹钟唤醒时 它会再次启动服务 如果程序崩溃 警报仍然存在并唤醒警报广播接收器 有什么方法可以取消崩溃时的警报 我想我也许可以取消任何捕获的异常的警报 但其他原因呢 或者当警报广
  • 新 Maven/Spring MVC 项目的最小 pom.xml 文件

    我对 Maven 和 Spring MVC 完全陌生 我想做的是使用 Maven 设置一个新的 Spring MVC 项目 希望这句话有意义 并使用 Eclipse 在 Tomcat 上运行我的 Web 应用程序 我正在按照此链接上的教程进
  • 为什么 Logstash 需要这么长时间才能启动/加载?

    Edit 我更改了标题 因为问题不是我最初想象的那样 事实是 logstash 需要超过一分钟开始 这可能会被误解为 沉默 我正在尝试让logstash运行 所以我按照官方网站上的说明进行独立安装 http logstash net doc
  • 为什么 NSURLSession uploadTaskWithRequest:fromData: 无法上传到 php 服务器?

    php 代码工作正常 我已经从同一服务器上的 html 表单上传了文件 上传的文件大小从 40K 到 2 0M 不等 因此其大小不高 在运行 PHP 5 3 的服务器上激活文件上传 我发现了很多这样的帖子 还没有答案 https stack
  • 绑定到 ViewModel 和 CodeBehind 中的属性

    我确信这是一个可笑的无知问题 但无论如何我还是要问这个问题 因为我搜索了又搜索 要么不理解我所看到的解决方案 要么没有找到我所寻求的答案 我有一个 MVVM 应用程序 我的 XAML 设置为 VM 的 DataContext 其中屏幕上的数