WPF 中的双向绑定

2023-12-29

我无法在 WPF 中实现双向绑定。

我的应用程序主窗口中有一个绑定到文本框的字符串属性(我将模式设置为“TwoWay”)。

TextBox 的值唯一更新的时间是窗口初始化时。

当我在文本框中键入内容时,基础字符串属性值不会更改。

当字符串属性的值被外部源更改(例如,Click 上的事件,仅重置 TextBox 的值)时,更改不会向上传播到 TextBox。

即使在这个几乎微不足道的示例中,我必须执行哪些步骤才能使双向绑定正常工作?


您很可能正在尝试绑定到 .net CLR 属性,而不是 WPF dependencyProperty(除了其他一些功能之外,它还提供更改通知)。
对于普通的 CLR 属性,您需要实现 INotifyPropertyChanged 并在 PropertyChanged 的​​事件处理程序中强制更新文本框。

  • 因此,让具有属性的对象实现此接口,在属性设置器中引发事件。 (所以现在我们有属性变更通知)
  • 确保该对象设置为 UI 元素/控件的 DataContext 属性

当我开始学习 WPF 数据绑定时,这也让我感到困惑。

Update: 好吧,OP,如果我找错了树,那将是浪费时间..无论如何,现在因为你必须挖掘一点..你会记住它很长一段时间。这是完善这个答案的代码片段。还发现,一旦我退出,更新文本框就会自动发生。如果您的 datacontext 对象不是实现 INotifyPropertyChanged 的​​对象,您只需要手动订阅该事件并更新 UI。

MyWindow.xaml

<Window x:Class="DataBinding.MyWindow" ...
    Title="MyWindow" Height="300" Width="300">
    <StackPanel x:Name="TopLevelContainer">
        <TextBox x:Name="txtValue"  Background="AliceBlue" Text="{Binding Path=MyDotNetProperty}" />
        <TextBlock TextWrapping="Wrap">We're twin blue boxes bound to the same property.</TextBlock>
        <TextBox x:Name="txtValue2"  Background="AliceBlue" Text="{Binding Path=MyDotNetProperty}" />
    </StackPanel>
</Window>

MyWindow.xaml.cs

public partial class MyWindow : Window, INotifyPropertyChanged
{
    public MyWindow()
    {
        InitializeComponent();
        this.MyDotNetProperty = "Go ahead. Change my value.";
        TopLevelContainer.DataContext = this;
    }

    private string m_sValue;
    public string MyDotNetProperty
    {
        get { return m_sValue; }
        set
        {
            m_sValue = value;
            if (null != this.PropertyChanged)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("MyDotNetProperty"));
            }
        }
    }

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

WPF 中的双向绑定 的相关文章

  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • 如何(完全)在列表框中实现就地编辑?

    我正在构建一个应用程序 其中ListBox正在显示Description其项目的属性 我想实现与您在 Windows 资源管理器中编辑文件名时发现的相同类型的就地编辑功能 但我发现这需要大量工作 到目前为止我所拥有的是ContextMenu
  • 如何使用数据绑定将点击侦听器设置为 LinearLayout

    我目前正在尝试将点击侦听器设置为LinearLayout查看在 xml使用数据绑定的布局文件 我已经设法让它在其他视图上很好地工作 比如Button or TextView 但由于某种原因 它不能与LinearLayout 这是我尝试的基本
  • 将集合绑定到自定义控件属性

    我没有运气尝试将数据集合绑定到我的自定义控件的属性 我已经实现了该控件的字符串属性的机制 在此处提供了一些帮助 并期望集合类型同样简单 但是我无法让它再次工作 这是我的自定义控件视图
  • 如何在标准 WPF ListView 中启用 UI 虚拟化

    我正在使用 NET 4 5 VS2012 并且我有一个 ListView 看起来像这样
  • WPF:使用 StringFormat={}{0:F2} 进行文本框绑定。不显示零

    我使用以下 XAML 将对象绑定到 TextBox
  • 如何禁用列表框上的突出显示但保留选择?

    我无法找到如何不允许我的列表框突出显示所选项目 我知道我没有添加触发器来突出显示该项目
  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • 获取 TreeView 中子节点的 SelectedIndex

    我目前正在使用 C 开发一个 wpf 项目 我创建了一个树视图 其中包含父节点和子节点 我想知道是否有办法获取用户单击的子节点的索引 类似于使用组合框时的 SelectedIndex 我尝试过各种方法 例如 int val TreeView
  • 如何将 WPF UIElement 从可视化树移动到固定页面?

    我的 MVVM 应用程序使用屏幕上的视觉对象将屏幕内容渲染到打印文档 我的视图有一个ContentControl使用DataTemplate资源来确定要显示的内容 但是当我尝试将该内容添加到FixedPage对象 我得到一个Argument
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • WPF/数据集:如何通过 XAML 将相关表中的数据绑定到数据网格列中?

    我正在使用 WPF DataSet 连接到 SQL Server Express XAML 和 C Visual Studio 2013 Express 我从名为 BankNoteBook 的现有 SQL Server Express 数据
  • ViewModel 中的 TextBox CaretIndex 属性

    是否可以通过视图中定义的 Binding 获取 设置 wpf 视图模型中 TextBox 控件的 CaretIndex 属性的值 Thanks 这里的问题是如何获得CaretIndex of the TextBox通过视图模型进行控制 如果
  • 如何在MVVM中管理多个窗口

    我知道有几个与此类似的问题 但我还没有找到明确的答案 我正在尝试深入研究 MVVM 并尽可能保持纯粹 但不确定如何在坚持模式的同时启动 关闭窗口 我最初的想法是向 ViewModel 发送数据绑定命令 触发代码来启动一个新视图 然后通过 X
  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • 从固定文档中删除页面?

    如何从固定文档中删除页面 我添加这样的页面 Add page to pageContent PageContent pageContent new PageContent IAddChild pageContent AddChild fix
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • WPF画布性能-children.add调用多次

    我在长画布上绘制了很多线条 想想条形图 并对其性能进行了相当好的调整 使用低级几何类并冻结它们等 这极大地提高了性能 但仍然需要几秒钟将几千个项目加载到画布中 我对应用程序进行了性能分析 看起来每次调用都花费了很大一部分时间canvas c
  • 异步WCF调用来保存线程?

    In 另一个问题 https stackoverflow com q 19731600 279516 建议我发送异步网络请求 而不是在后台线程上发送同步请求 原因是为了不浪费一根线 我试图理解这是怎么回事 这是最初的做法 我可以理解这里怎么
  • 如何将文本放在 RadioButton 的顶部

    我正在尝试实现附件中显示的效果 但没有成功 甚至有可能吗 我试图将文本框放在单选按钮内 并将其设置为水平和垂直内容对齐 但它没有按我想要的方式工作 欢迎任何建议 Resource

随机推荐

  • qemu-x86_64:无法打开“/lib64/ld-linux-x86-64.so.2”:没有这样的文件或目录

    我在 M1 MacOS 上有一个 Rancher Desktop docker 当我尝试在 dockerfile 下构建时 我收到如下错误 这是我尝试构建图像的命令docker build t te grafana dashboards t
  • 启用 Java 允许过期证书

    是否有任何命令行标志可以使 Java 允许过期的证书 现在 由于证书已过期 我收到以下异常 Caused by java security cert CertificateExpiredException NotAfter PAST DAT
  • 在 WPF 中将整数转换为颜色

    如何在WPF中将整数转换为颜色 例如 我想将 16711935 转换为颜色 如何在 Windows 窗体 WPF 中执行如下操作 myControl Background Color FromArgb myColorInt Use the
  • 在指针列表中查找一个项目

    我试图了解如何使用 std find 在 C 中的指针列表中查找项目 如果我有例如 std list
  • UIPickerView 禁用行选择

    我想禁用我的某些行的选择UIPickerView 就像在倒计时器中一样 您尝试选择 0 它不会让您选择 并且会滑回到 1 或者您如何限制倒数计时器中的日期Date Picker 如何禁用 a 中的行UIPickerView In UIPic
  • Symfony 如何删除文件

    为什么我不能在 Symfony 中使用 unlink 我已经尝试过这个 unlink Applications XAMPP xamppfiles htdocs symfonydev web account assets data suppl
  • 在 xaml 上设置 GroupStyle 内部样式

    我正在尝试为 ContextMenu 设置默认样式 并且我想在样式内设置默认 GroupStyle ContextMenu 像这样的事情
  • Qt C++ 在 GUI 线程之外显示图像(Boost 线程)

    我正在开发一个C 库 使用VS2015通过Qt实现其接口 在图书馆方面 3增强线程连续加载 3 个文件夹中的图像 我正在尝试以 3 种不同的方式显示这些图像QLabel 或同等学历QWidgets 所以线程体由这个功能组成 特别是通过利用设
  • Windows 上的 Makefile 干净

    我现在正在学习如何使用 makefile 我制作了以下 makefile 我在 Windows 上使用 Visual Studio 命令行编译器 CC cl CFLAG EHsc test database exe composer obj
  • 如何从 LocalDate 和 LocalDateTime 中提取纪元?

    如何提取纪元值Long来自实例LocalDateTime or LocalDate 我试过了 以下 但它给了我其他结果 LocalDateTime time LocalDateTime parse 04 02 2014 19 51 01 D
  • CSS:动画与过渡

    我了解如何执行 CSS3过渡 https developer mozilla org en US docs Web CSS CSS Transitions Using CSS transitions and 动画 https develop
  • Rails 3 自动添加 X-UA-Compatible 标头?

    如果您使用 IE8 Rails 3 会自动添加标头吗 我看到 X UA Compatible 的元标记设置为 IE 8 0000 它扰乱了我的观点之一 我似乎找不到其他任何可以做到这一点的东西 所以我想我应该问这里的大脑 谢谢 鲁普里克特
  • 使用 scipy、numpy、python 等进行 sigmoidal 回归

    我有两个变量 x 和 y 它们彼此之间存在某种 S 型关系 并且我需要找到某种预测方程 使我能够在给定 x 的任何值的情况下预测 y 的值 我的预测方程需要显示两个变量之间的 S 形关系 因此 我不能满足于产生一条直线的线性回归方程 我需要
  • AbcPdf - 未应用 CSS 的文档

    这可能更多是一个技术支持问题 但我想知道是否有其他开发人员遇到过这种情况 我在 ASP NET 代码中使用 Abcpdf 从 HTML 生成 PDF 它工作正常 但一名用户生成的 PDF 没有应用 CSS IE8 Adobe Acrobat
  • 如何将文本区域数据发送到另一个页面?

    我对这种事情很陌生 我需要将 3 个文本区域中的数据提交到另一个页面 我怎么做 附 如果可以的话 我会使用输入 您需要使用表单创建页面 例如将其命名为 form html 使用此代码例如
  • 等待异步函数结果未定义

    我在使用 Node js 进行异步 等待时遇到问题 当我尝试这个时 function Read Json File fs readFile import json utf 8 err data gt if err throw err jso
  • Google Places API - 查找公司的 CID 和 LRD

    有人知道如何使用 Google Places API 查找公司的 CID 和 或 LRD 吗 到目前为止我想出的最好的解决方案是 Go to https maps google com https maps google com并搜索该业务
  • 为什么公共语言运行时不支持 Java [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Eclipse - maven - 我应该执行什么目标才能从 Maven 实际部署到 Wildfly(达到与“在服务器上运行”eclipse 命令相同的结果)

    Maven 新手 我有一个 Eclipse 项目 我可以右键单击 gt 运行为 gt 在服务器上运行它在我本地的 Wildfly 安装上成功运行 有没有办法R单击 gt 运行为 并选择适当的maven目标来达到相同的效果 即打包为war 复
  • WPF 中的双向绑定

    我无法在 WPF 中实现双向绑定 我的应用程序主窗口中有一个绑定到文本框的字符串属性 我将模式设置为 TwoWay TextBox 的值唯一更新的时间是窗口初始化时 当我在文本框中键入内容时 基础字符串属性值不会更改 当字符串属性的值被外部