WPF,数据模板中的双向绑定

货郎大叔 2019-10-24 07:37:40

<Grid>
<Button Name="button1" Content="张三">
<Button.ContentTemplate>
<DataTemplate>
<Grid>
<TextBox FontSize="13" Text="{Binding Path=." />
</Grid>
</DataTemplate>
</Button.ContentTemplate>
</Button>
<Button x:Name="button2" Content="Button" Width="75" Click="Button_Click"/>
</Grid>


private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(button1.Content.ToString());
}


在上面的Button中,数据模板中有一个TextBox,用于显示Content,当在TextBox中修改文本内容之后,单击button2,输出button1的Content,结果Content的值仍然是张三,这是为什么呢?TextBox不是双向绑定的吗,修改Text的值之后,button1的Content也应该改变啊
...全文
471 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eason0807 2019-10-29
  • 打赏
  • 举报
回复
button1当中你的数据模板上没有把content属性放到数据模板上,而是用一个textbox绑定了数据上下文,所以当你给content赋值的时候,textbox的text值是不变的
hez2010 2019-10-27
  • 打赏
  • 举报
回复
绑定默认是单向的。 双向绑定需要:{Binding Path=., Mode=TwoWay}
货郎大叔 2019-10-26
  • 打赏
  • 举报
回复
有人知道吗?
exception92 2019-10-24
  • 打赏
  • 举报
回复
引用 8 楼 货郎大叔 的回复:
[quote=引用 7 楼 exception92 的回复:] 第一次显示的是content的值,以后的修改和Content就没有关系了,因为修改了Content模板。
我也是在文本框中修改了值啊,为什么弹出的还是张三呢?[/quote] WPF中绑定指的是以数据驱动为介质的绑定。参见#6
货郎大叔 2019-10-24
  • 打赏
  • 举报
回复
引用 7 楼 exception92 的回复:
第一次显示的是content的值,以后的修改和Content就没有关系了,因为修改了Content模板。
我也是在文本框中修改了值啊,为什么弹出的还是张三呢?
exception92 2019-10-24
  • 打赏
  • 举报
回复
第一次显示的是content的值,以后的修改和Content就没有关系了,因为修改了Content模板。
OrdinaryCoder 2019-10-24
  • 打赏
  • 举报
回复

 <StackPanel>
        <Button Name="button1" Width="150" Height="150">
            <TextBox x:Name="text" FontSize="13" Text="{Binding Path=Name,Mode=TwoWay}" Width="50" />
        </Button>
        <Button x:Name="button2" Content="Button" Width="150" Click="Button_Click"/>
    </StackPanel>

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfTest
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window, INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
        TestModel model;

        internal TestModel Model
        {
            get { return model; }
            set { model = value; ; NotifyPropertyChanged("Model"); }
        }
        public MainWindow()
        {
            InitializeComponent();
            Model = new TestModel();
            this.button1.DataContext = Model;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(button1.Content.ToString());
            MessageBox.Show(Model.Name);
           
        }
    }
}

Dear200892 2019-10-24
  • 打赏
  • 举报
回复
就加了一句button1.Content = "123";
货郎大叔 2019-10-24
  • 打赏
  • 举报
回复
引用 3 楼 Dear200892 的回复:
你给的源码有问题

 <Grid>
        <Button Name="button1" Content="张三">
            <Button.ContentTemplate>
                <DataTemplate>
                    <Grid>
                        <TextBox FontSize="13" Text="{Binding Path=.}" />
                    </Grid>
                </DataTemplate>
            </Button.ContentTemplate>
        </Button>
        <Button x:Name="button2" Content="Button" Width="75" Click="Button_Click"/>
    </Grid>
少写了一个中括号,已修正
Dear200892 2019-10-24
  • 打赏
  • 举报
回复
你给的源码有问题
货郎大叔 2019-10-24
  • 打赏
  • 举报
回复
引用 1 楼 Dear200892的回复:
https://www.cnblogs.com/tianma3798/p/5765464.html INotifyPropertyChanged(向客户端发出某一属性值已更改的通知。)接口
不是你说的这个。。。
Dear200892 2019-10-24
  • 打赏
  • 举报
回复
https://www.cnblogs.com/tianma3798/p/5765464.html INotifyPropertyChanged(向客户端发出某一属性值已更改的通知。)接口
货郎大叔 2019-10-24
  • 打赏
  • 举报
回复
我说的是数据模板呢,不要修改我的代码
货郎大叔 2019-10-24
  • 打赏
  • 举报
回复
我说的是数据模板呢,不要修改我的代码
OrdinaryCoder 2019-10-24
  • 打赏
  • 举报
回复
我6#的代码你可以试一下 直接在button里嵌套Textbox
货郎大叔 2019-10-24
  • 打赏
  • 举报
回复
引用 9 楼 exception92的回复:
[quote=引用 8 楼 货郎大叔 的回复:] [quote=引用 7 楼 exception92 的回复:] 第一次显示的是content的值,以后的修改和Content就没有关系了,因为修改了Content模板。
我也是在文本框中修改了值啊,为什么弹出的还是张三呢?[/quote] WPF中绑定指的是以数据驱动为介质的绑定。参见#6[/quote] 怎么说得不沾边啊。。
DataUml Design 是面向开发人员使用的一个永久免费的软件,提高软件的开发效率和代码的规范度。它主要包括三大功能,数据模型、代码生成和UML建模,数据模型功能类似于PowerDesigner软件,代码生成类似于动软的代码生成器. DataUml Design是采用WPF开发的一款软件,该软件功能包括实体类建模、数据库设计、模型与数据库同步、数据库与模型同步、代码生成、文档生成、数据库生成实体模型等功能。以往的软件修改模型之后还得修改数据表结构,需要同步修改两个地方,而DataUml Design解决了该问题, 软件开发人员只需要修改模型结构或数据表结构,然后利用软件的同步功能即可达到模型与数据表结构的一致性。方便开发人员轻轻松松地管理自己的模型与数据库。 DataUml Design的自定义模板采用微软的4T技术,开发人员可以配置自己的代码模板。如实体层、数据访问层和UI层都可以用模板来配置,由模型一键生成代码,实现模型与代码的一致性。 DataUml Design支持数据的导入与导出,可以导出模型结构的文档,也支持其实数据导入生成数据模型(下一版本将实现)。 DataUml Design目前只支持MS Server和Oracle数据库、C#和Java语言,其它数据库和语言下一版本将实现。 DataUml Design功能特点 1)、模型设计 DataUml Desing数据建模采 用图形化设计,基于UML标准,遵循UML类图概念。模型的类和数据的表对应,类的成员分为字段、属性、事件等,类的属性对应数据的字段。类的 属性成员的属性又包括数据字段的所有属性。类与类的关联关系包括单向关联、双向关联、组合、聚合。关联关系与数据的外键相对应。关联关系也具有属 性。 2)、模型和数据库同步 数据模型与数据库绑定,设计模型之后可以一键把模型提交到绑定的数据,如果数据表存在,则会更新数据表结构,如果数据代不存在,则会创建一张新表,用户不需要关心如何数据库类型,DataUml Design会帮你完成所有功能。 如果数据增加了字段或修改了某个字段,需模型需没有更改,只需把数据表同步到模型即可,不需要开发人员对照数据表结构来修改模型结构。 3)、代码生成 DataUml Desing采用代码模板来生成代码,软件开发人员可以根据自己的要求来设计代码模板。代码模板可以生成任务语言的代码。软件开发人员可以用代码模板获取到类的所有属性以及关联的类。 软件下载地址: www.netuml.com
DataUml Design 是面向开发人员使用的一个永久免费的软件,提高软件的开发效率和代码的规范度。它主要包括三大功能,数据模型、代码生成和UML建模,数据模型功能类似于PowerDesigner软件,代码生成类似于动软的代码生成器. DataUml Design是采用WPF开发的一款软件,该软件功能包括实体类建模、数据库设计、模型与数据库同步、数据库与模型同步、代码生成、文档生成、数据库生成实体模型等功能。以往的软件修改模型之后还得修改数据表结构,需要同步修改两个地方,而DataUml Design解决了该问题, 软件开发人员只需要修改模型结构或数据表结构,然后利用软件的同步功能即可达到模型与数据表结构的一致性。方便开发人员轻轻松松地管理自己的模型与数据库。 DataUml Design的自定义模板采用微软的4T技术,开发人员可以配置自己的代码模板。如实体层、数据访问层和UI层都可以用模板来配置,由模型一键生成代码,实现模型与代码的一致性。 DataUml Design支持数据的导入与导出,可以导出模型结构的文档,也支持其实数据导入生成数据模型(下一版本将实现)。 DataUml Design目前只支持MS Server和Oracle数据库、C#和Java语言,其它数据库和语言下一版本将实现。 DataUml Design功能特点 1)、模型设计 DataUml Desing数据建模采 用图形化设计,基于UML标准,遵循UML类图概念。模型的类和数据的表对应,类的成员分为字段、属性、事件等,类的属性对应数据的字段。类的 属性成员的属性又包括数据字段的所有属性。类与类的关联关系包括单向关联、双向关联、组合、聚合。关联关系与数据的外键相对应。关联关系也具有属 性。 2)、模型和数据库同步 数据模型与数据库绑定,设计模型之后可以一键把模型提交到绑定的数据,如果数据表存在,则会更新数据表结构,如果数据代不存在,则会创建一张新表,用户不需要关心如何数据库类型,DataUml Design会帮你完成所有功能。 如果数据增加了字段或修改了某个字段,需模型需没有更改,只需把数据表同步到模型即可,不需要开发人员对照数据表结构来修改模型结构。 3)、代码生成 DataUml Desing采用代码模板来生成代码,软件开发人员可以根据自己的要求来设计代码模板。代码模板可以生成任务语言的代码。软件开发人员可以用代码模板获取到类的所有属性以及关联的类。
.Net.Framework3.5开发技术详解 完整程度:99%完整 少最后8页 清晰度:一般 格式:PDF 总页数:402 内容简介 《.NET Framework3.5开发技术详解》全面讲解了.NET Framework 3.5开发各方面的技术要点,共分19章。《.NET Framework3.5开发技术详解》没有对各个功能的工作原理进行深入的揭示,而是采用“知识进述”+“代码示例”的方式,让读者可以快速体验并掌握.NET Framework 3.5的开发方法。 《.NET Framework3.5开发技术详解》适合从事各种.NET程序开发的人员阅读。通过不同层次的例子,相信可以让读者理解、掌握.NET程序开发,特别是关于WPF、WCF和WF这3种重要框架的应用所要掌握的知识。 目录 第1章 .NETFramework3.5 简介 1.1.NETFramework3.5 在.NET技术体系的位置 1.2.NET3.5 各部分的功能 1.3.NET3.5 的组件 1.3.1 WindowsPresentaionFoundation(WPF) 1.3.2 WindowsCommunicationFoundation(WCF) 1.3.3 WorkflowFoundation(WF) 1.4 搭建.NET3.5 的开发环境 1.4.1 在WindowsXP/2003/Vista上搭建开发环境 1.4.2 相关工具 第2章 .NET3.5 的新功能 2.1.NET3.5 概要 2.2 新的.NET基础类型 2.3 C#语言的强化 2.3.1 C#基本语法增强 2.3.2 LINQ(集成语言查询) 第3章 WindowsPresentationFoundation基础知识 3.1 WindowsPresentationFoundation(WPF)的概念 3.2 XAML的概念 3.2.1 命名空间 3.2.2 代码后置文件 3.2.3 调用.NET类库的类来定义对象 3.2.4 属性 3.3 WPF的结构和相关的类库 3.4 WPF应用程序的类型 3.4.1 传统类型的视窗程序 3.5 创建第一个WPF程序 第4章 WPF程序的布局 4.1 布局的基础知识 4.2 StackPanel容器 4.3 DockPanel容器 4.4 Grid容器 4.4.1 表格的高度和宽度 4.4.2 ColumnSpan和RowSpan 4.4.3 Grid的SharedSizeGroup 4.5 Canvas容器 4.6 文档布局 4.6.1 WrapPanel 4.6.2 TextBlock 4.6.3 FlowDocument 4.7 其他容器 4.8 视图控制 4.9 自定义布局 第5章 WPF的控件 5.1 控件模型 5.2 WPF的控件树 5.3 路由事件 5.4 从属属性(DependencyProperty) 5.5 处理交互行为 5.6 基本控件的使用 5.6.1 Button控件 5.6.2 TextBox类控件 5.6.3 列表控件 5.6.4 Menu控件 5.6.5 包容式控件 5.6.6 Label和TextBlock 5.6.7 其他控件 第6章 资源和数据绑定 6.1 在WPF定义资源 6.1.1 WPF的嵌入式资源 6.1.2 定义逻辑资源 6.2 使用资源 6.3 数据绑定基础 6.4 集合的绑定 6.5 DataProvider 6.6 高级数据绑定操作 6.7 使用CollectionViewSource进行排序和过滤 第7章 让WPF程序支持样式和主题 7.1 样式基础 7.1.1 WPF样式的定义 7.1.2 样式的作用 7.1.3 样式的作用范围 7.2 内联样式 7.3 命名样式 7.4 样式触发器 7.5 控件模板 7.6 主题 第8章 WPF的绘图功能 8.1 2D图形基础 8.2 2D几何图形 8.3 画刷和画笔 8.3.1 画刷 8.3.2 画笔 8.4 2D图形变换(Transform) 8.4.1 平移变换 8.4.2 缩放变换 8.4.3 旋转变换 8.4.4 斜移变换 8.4.5 矩阵变换 8.4.6 变换组(TransformGroup) 8.5 2D图形特效 8.6 3D图形基础 8.6.1 计算机图形学基础 8.6.2 WPF的3D类型 8.7 3D变换 8.8 WPF的动画支持 8.8.1 Animation对象 8.8.2 第一个动画 第9章 WPF的多媒体 9.1 对视频和音频的支持 9.1.1 视频支持 9.1.2 音频支持 9.2 语音功能 第10章 WPF高级技术 10.1 WPF自定义控件 10.1.1 编写控件的基础知识 10.1.2 开始编写控件 10.1.3 编写CustomControl控件 10.2 WPF的互操作性 10.2.1 在WPF使用Winform控件 10.2.2 在WInform程序使用WPF控件 10.3 WPF的异步模型 10.4 WPF对自动化程序的支持 10.4.1 Automation树 10.4.2 控件的访问方式 第11章 WindowsCommunicationFoundation(WCF)基础 11.1 面向服务编程模型(框架) 11.1.1 什么是SOA 11.1.2 为什么要使用SOA 11.2 WCF是什么 11.3 WCF的结构 11.4 WCF基础 第12章 WCF的契约 12.1 服务契约和操作契约 12.2 数据契约(DataContract) 12.3 错误契约(FaultContract) 12.4 创建WCF服务 12.5 编写WCF客户端 12.6 配置WCF程序 12.6.1 服务端配置 12.6.2 客户端配置 12.6.3 配置工具 第13章 WCF的消息交换 13.1 与通信有关的概念 13.1.1 Address(地址) 13.1.2 Bindings(通信绑定) 13.1.3 Contracts(契约) 13.1.4 EndPoint 13.2 远程对象的传递 13.3 大对象的传递 13.4 错误处理 13.5 会话管理 13.6 双向通信 13.7 WCF的消息编码 13.8 基于队列的消息交换 13.9 点对点网络(Peer-To-PeerNetwork) 第14章 并发管理 14.1 服务器实例行为管理 14.2 并发管理 14.3 同步上下文 14.4 回调的同步设置和异步调用 第15章 WCF的事务支持 15.1 事务概要 15.2 WCF的事务 15.3 创建支持事务的服务 第16章 WCF的安全解决方案 16.1 认证和授权 16.1.1 认证 16.1.2 授权 16.2 安全传输 16.2.1 传输的安全性 16.2.2 消息安全 16.3 安全策略 第17章 WCF的扩展性 17.1 服务行为的扩展 17.1.1 自定义分发器特性 17.2 自定义通道 17.3 自定义元数据 17.3.1 元数据的基本知识 17.3.2 扩展元数据系统 17.4 自定义序列化 第18章 WCF的运行环境 18.1 在IIS上启用WCF服务 18.2 在.NET程序运行WCF服务 18.3 在Windows服务程序运行WCF服务 第19章 工作流(WorkFlow) 19.1 工作流(WF)简介 19.1.1 工作流的概念 19.1.2 WindowsWorkFlowFoundation 19.2 Activity(活动) 19.3 WF运行时 19.4 基于状态机的工作流 19.5 工作流的持久化 19.6 工作流的XAML表示

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧