Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么我的WPF绑定实现不能双向工作?

为什么我的WPF绑定实现不能双向工作?
EN

Stack Overflow用户
提问于 2016-10-26 13:04:02
回答 1查看 93关注 0票数 1

我正在尝试为WPF绑定创建一个模板,以便在将来需要使用绑定时从它中提取代码。目前,绑定是不工作的任何一种方式。

我期望这段代码在UI中的文本框中显示"MyString“和"MyInt”,并在用户更改值时正确地更改逻辑(因此需要选中按钮)。

然而,MyString和MyInt并没有显示在文本框中,也没有改变变量的值。

MainWindow.xaml.cs:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System.Windows;
namespace WpfBindingTemplate
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;
            myController = new Controller();
        }

        Controller myController;

        private void check_string(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("MyString: " + myController.MyString);
        }

        private void check_int(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("MyInt: " + myController.MyInt);
        }
    }
}

MainWindow.xaml:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Window x:Class="WpfBindingTemplate.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfBindingTemplate"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBox Name="myTextBox" Text="{Binding Path=myController.MyString}" HorizontalAlignment="Left" Height="23" Margin="202,136,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
        <Label x:Name="label" Content="String binding:" HorizontalAlignment="Left" Margin="77,133,0,0" VerticalAlignment="Top" Width="104"/>
        <Button x:Name="button" Content="string check" Click="check_string" HorizontalAlignment="Left" Margin="370,136,0,0" VerticalAlignment="Top" Width="75"/>
        <Label x:Name="label1" Content="int binding:" HorizontalAlignment="Left" Margin="77,188,0,0" VerticalAlignment="Top" Width="94"/>
        <TextBox x:Name="textBox" Text="{Binding Path=myController.MyInt}" HorizontalAlignment="Left" Height="23" Margin="202,190,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
        <Button x:Name="button1" Click="check_int" Content="int check" HorizontalAlignment="Left" Margin="370,188,0,0" VerticalAlignment="Top" Width="75"/>
    </Grid>
</Window>

控制器类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;

namespace WpfBindingTemplate
{
    public class Controller : INotifyPropertyChanged
    {
        public Controller()
        {
            MyString = "test string";
            MyInt = 1;
        }

        public int MyInt { get; set; }

        private string myString;
        public string MyString { get { return myString; } set { SetProperty(ref myString, value); } }


        public event PropertyChangedEventHandler PropertyChanged;
        private void SetProperty<T>(ref T field, T value, [CallerMemberName] string name = "")
        {
            if (!EqualityComparer<T>.Default.Equals(field, value))
            {
                field = value;
                var handler = PropertyChanged;
                if (handler != null)
                {
                    handler(this, new PropertyChangedEventArgs(name));
                }
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-26 13:06:31

首先,绑定对字段不起作用,您需要在"Controller myController“上设置get/set;它还需要是公共的(在某些条件下,它也可以用于内部)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40272078

复制
相关文章
vue的双向绑定原理及实现_vue双向绑定指令
以往的MVC模式是单向绑定,即Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新
全栈程序员站长
2022/11/07
1K0
vue的双向绑定原理_vue的双向绑定原理及实现
首先我觉得理解vue双向绑定原理应该要有略懂一下发布订阅者模式,我略带过一下。与观察者模式不同的是,发布订阅者多了一个中间调度中心而已。下面给两个比较好的例子
全栈程序员站长
2022/11/02
9430
【Jetpack】DataBinding 架构组件 ⑤ ( 数据模型与视图双向绑定 | BaseObservable 实现双向绑定 | ObservableField 实现双向绑定 )
将 数据模型 Model 中的 指定 Field 字段 绑定到 View 视图中的组件 ,
韩曙亮
2023/04/24
1.4K0
【Jetpack】DataBinding 架构组件 ⑤ ( 数据模型与视图双向绑定 | BaseObservable 实现双向绑定 | ObservableField 实现双向绑定 )
Angular 双向绑定实现原理
用 Angular + socket.io 做了一个聊天 demo,消息通信没有问题,在 Angular 数据绑定的地方却栽了跟头:明明 model 已经发生了改变,在视图上就是看不到更新。
李振
2021/11/26
4K0
JS 实现双向数据绑定
近几年前端技术栈真是发展的太迅速了,从以前的针对dom操作的框架如jquery,ext.js等框架逐步过渡到当前的mvvm模式,让前端开发者将注意力从dom操作逐渐解脱出来,专注于逻辑的实现,个人认为开发效率至少提升了1倍,mvvm模式的一个核心便是数据的双向绑定。
grain先森
2019/03/28
2.6K0
JS 实现双向数据绑定
Vue双向绑定实现原理
实现双向绑定需要Object.defineProperty,需要了解劫持对象的属性后获取对象的属性会触发get函数,更改对象属性值会触发set函数
peng_tianyu
2022/12/15
2710
JavaScript实现简单的双向数据绑定
双向数据绑定简单来说就是UI视图(View)与数据(Model)相互绑定在一起,当数据改变之后相应的UI视图也同步改变。反之,当UI视图改变之后相应的数据也同步改变。
laixiangran
2018/07/25
1.9K0
梳理vue双向绑定的实现原理
Vue 采用数据劫持结合发布者-订阅者模式的方式来实现数据的响应式,通过Object.defineProperty来劫持数据的setter,getter,在数据变动时发布消息给订阅者,订阅者收到消息后进行相应的处理。
周陆军
2019/02/14
1.2K0
vue 数据双向绑定的实现方法
这篇文章主要介绍了vue 数据双向绑定的实现方法,帮助大家更好的理解和学习使用vue框架,感兴趣的朋友可以了解下
米米素材网
2022/07/24
7860
vue 数据双向绑定的实现方法
vue的双向绑定原理_数据双向绑定原理
从开始学习前端到现在走在进入中高级前端开发的路上,觉得上手容易又简单的就是Vue框架,包含其相关的生态系统。一直只是简单了解双向绑定的原理,并没有手动去实现或者去拜读过源码。而vue双向绑定基本是面试必考项,通过这段时间的学习,输出以下双向绑定的简单实现示例。
全栈程序员站长
2022/11/10
1.6K0
vue的双向绑定原理_数据双向绑定原理
VUE双向绑定原理_vue的数据绑定怎么实现
烂大街原理:数据劫持+发布订阅者模式 (obect.defineProperty())……..(此处省略8888个字节)。
全栈程序员站长
2022/10/05
9080
VUE双向绑定原理_vue的数据绑定怎么实现
Vue数据双向绑定实现原理
我们会发现其实在vue2源码中,本质上就是利用Object.defineProperty来劫持对象。
Maic
2022/07/28
6780
Vue数据双向绑定实现原理
vue的双向绑定原理及实现_vue的数据绑定怎么实现
​ 所谓双向绑定,指的是vue实例中的data与其渲染的DOM元素的内容保持一致,无论谁被改变,另一方会相应的更新为相同的数据。(数据变化更新视图,视图变化更新数据)
全栈程序员站长
2022/11/02
9690
vue的双向绑定原理及实现_vue绑定数据
单向绑定非常简单,就是把Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新
全栈程序员站长
2022/10/05
1.6K0
vue的双向绑定原理及实现_vue绑定数据
Vue双向绑定原理,教你一步一步实现双向绑定
当今前端天下以 Angular、React、vue 三足鼎立的局面,你不选择一个阵营基本上无法立足于前端,甚至是两个或者三个阵营都要选择,大势所趋。
六小登登
2018/11/15
9860
原生js实现vue的数据双向绑定
写在前面 很多面试官在面试的时候为了显示自己很牛,喜欢问面试者,你会不会使用原生js实现vue的双向绑定啊,每次我遇到这种面试官我都想揍他一顿,不是说这个问题问得不好,我就想问问,我会或者不会影响我使用vue吗?如果真的是使用原生的话,需要这种功能吗?如果使用vue的话,需要知道吗?但是很多面试官还是会问,所以这里我还是给大家写一下,其实没有想象的那么的难! 简单的分析一波 所谓的双向绑定就是这边输入数据的时候,另一个dom节点可以时刻监听到这个数据的变化,并且做出相应的操作,最简单的操作就是输入什
何处锦绣不灰堆
2021/07/19
1.8K0
原生js实现vue的数据双向绑定
vue的双向绑定原理_vue中数据双向绑定的原理
这里的vm 就是vue框架,它相当于中间枢纽的作用,连接着model 和view.
全栈程序员站长
2022/11/19
2K0
vue的双向绑定原理_vue中数据双向绑定的原理
剖析Vue原理&实现双向绑定MVVM
本文能帮你做什么? 1、了解vue的双向数据绑定原理以及核心代码模块 2、缓解好奇心的同时了解如何实现双向绑定 为了便于说明原理与实现,本文相关代码主要摘自vue源码, 并进行了简化改造,相对较简陋,并未考虑到数组的处理、数据的循环依赖等,也难免存在一些问题,欢迎大家指正。不过这些并不会影响大家的阅读和理解,相信看完本文后对大家在阅读vue源码的时候会更有帮助 本文所有相关代码均在github上面可找到 https://github.com/DMQ/mvvm 相信大家对mvvm双向绑定应该都不陌生了,一言不
小时光
2018/01/29
3.1K0
双向数据绑定
v-model可以实现双向数据绑定,这是极其有用的功能,但仅用于表单元素。 先上效果图: 双向数据绑定.gif 具体代码 结合watch监听,v-model可以实现很多丰富的前端表单交互功能 双向绑定
章鱼喵
2018/07/04
1.5K0
如何手写实现《双向数据绑定》
1. 数据 -> 转为响应式数据 Object.defineProperty Proxy
用户9914333
2022/07/22
7260

相似问题

数据绑定WPF组合框不能双向工作

10

为什么我的WPF绑定不能工作?

24

为什么我的指令中的双向数据绑定不能工作?

12

WPF:为什么我的标记扩展绑定不能工作?

17

双向绑定不能正常工作

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文