首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将属性绑定到Datagrid上的Textbox在setter例程后不显示值

在WPF(Windows Presentation Foundation)中,将属性绑定到DataGrid上的TextBox并在setter例程后不显示值的问题,通常是由于数据绑定和更新机制没有正确设置导致的。以下是解决这个问题的详细步骤和相关概念:

基础概念

  1. 数据绑定:WPF中的数据绑定允许UI元素与数据源之间的自动同步。
  2. INotifyPropertyChanged接口:这是一个通知机制,当属性值改变时,它会通知绑定的UI元素更新。
  3. DependencyProperty:WPF中用于定义可绑定的属性。

问题原因

  • 缺少属性更改通知:如果没有实现INotifyPropertyChanged接口或没有正确触发属性更改事件,UI将不会知道属性值已经改变。
  • DataContext未正确设置:如果DataContext没有正确设置,绑定可能无法找到正确的源对象。

解决方案

以下是一个简单的示例,展示如何正确实现属性绑定并在属性值改变时更新UI。

步骤1:定义数据模型并实现INotifyPropertyChanged

代码语言:txt
复制
public class MyDataModel : INotifyPropertyChanged
{
    private string _myProperty;
    public string MyProperty
    {
        get { return _myProperty; }
        set
        {
            if (_myProperty != value)
            {
                _myProperty = value;
                OnPropertyChanged(nameof(MyProperty));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

步骤2:在XAML中设置绑定

代码语言:txt
复制
<DataGrid x:Name="dataGrid" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="My Property">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding MyProperty, UpdateSourceTrigger=PropertyChanged}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

步骤3:设置DataContext并填充数据

在代码后台设置DataContext并添加数据项:

代码语言:txt
复制
public MainWindow()
{
    InitializeComponent();
    dataGrid.ItemsSource = new List<MyDataModel>
    {
        new MyDataModel { MyProperty = "Initial Value 1" },
        new MyDataModel { MyProperty = "Initial Value 2" }
    };
}

应用场景

这种数据绑定机制广泛应用于需要实时更新UI以反映数据变化的场景,如数据录入表单、实时搜索结果展示等。

优势

  • 实时更新:用户界面能立即反映数据的任何变化。
  • 解耦:数据和UI逻辑分离,便于维护和扩展。

通过以上步骤,可以确保当属性值在setter中改变时,绑定的TextBox能够正确显示新的值。如果仍然遇到问题,请检查是否有其他代码干扰了数据绑定过程或是否有异常被抛出未被捕获。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【愚公系列】2023年10月 WPF控件专题 DataGrid控件详解

DataGrid还有许多其他的属性和方法,可以根据需求进行使用。1.属性介绍WPF中DataGrid控件的常见属性如下:AutoGenerateColumns:是否自动生成列,默认为true。...数据分页:DataGrid控件可以支持数据的分页显示,当数据量比较大时,可以将数据分页展示,方便用户进行快速的数据浏览和查找。...数据导入导出:DataGrid控件可以支持数据的导入和导出,可以将数据快速地导入到DataGrid中进行展示,也可以将DataGrid中的数据导出到其他文件格式中,方便数据的共享和使用。...在StudentDialogViewModel中,我们使用了一个私有字段_student来存储传入的Student对象,以及一些属性来绑定StudentDialog的控件,在属性的setter中通知界面更新...在StudentDialogViewModel中,我们还定义了两个RelayCommand,分别绑定OK和Cancel按钮的点击事件,并在Close方法中关闭窗口并返回结果。

1.2K00
  • WPF面试题大全,秒杀面试官必备

    12、C#中的表单界面上,有一个DataGrid控件,如何将SQL数据库里的一个表中的数据显示在这个控件上,请描述一下操作方法及步骤 ? 13、解释完整的WPF对象层次结构 ?...答:在WPF中,Binding是一种用于将数据与用户界面元素关联起来的功能。它可以将数据源中的值绑定到用户界面元素的属性,从而使数据源中的值自动更新到用户界面元素中。...Binding的实现语法如下: • 简单绑定: 在XAML中,使用{Binding}语法将UI元素的属性绑定到数据源的属性。...在C#代码中,编写查询数据库的代码,并将结果绑定到DataGrid控件上。可以使用SQLDataAdapter和DataSet来执行查询并获取结果集。...DataSet对象中,并将DataSet中的表绑定到DataGrid的ItemsSource属性上。

    90310

    C# WPF数据绑定方法以及重写数据模板后数据绑定

    写在前面 本文将会介绍WPF如何实现前后端数据绑定和在进行数据绑定时常用的方法和类以及对于DataGrid、ListView这样的控件重写数据模板后控件如何进行数据绑定。...1.数据源:数据绑定是通过ViewModel作为数据源,绑定到前台xaml进行实现的。通过后台对于数据源的修改,可以将内容直接同步到前台界面上。可以详见上面数据的删除和添加以及修改Text的实例。...这时我们需要用到Command(命令),在本实例中展示了将按钮的点击事件和键盘的回车事件通过命令的方式传到后台,但命令的用法远不止这两种,可以在实际的开发过程中跟据不同的需求在进行学习和尝试。...4.双向绑定:顾名思义绑定是双向的,不仅仅是后台数据更新后自动同步到前台,同时前台的数据更新也会自动同步到后台。...当然在绑定的过程中你可以设置多种模式,如果不设置默认为双向绑定,设置的方法是通过Mode属性(Binding="{Binding Name ,Mode=TwoWay}")你可以设置Default、OneTime

    75040

    【我们一起写框架】MVVM的WPF框架(三)—数据控件

    可以看到,处理存贮数据的DataContent属性之外,还创建了一些管理UI的属性IsEnabled、IsReadOnly、Visibility。 父类数据控件创建完成后,我们开始创建子类的数据控件。...= (text) => { MessageBox(text); };//声明TextChange } 如代码所示,我们在ViewModel中定义了ChangeTextBox属性,然后再Xaml中绑定了...ChangeTextBox属性的Text到UI控件TextBox的Text属性上,这样我们就实现了数据联动。...因为WPF的UI控件被创建以后,要被添加到视觉树中,所以最终会被显示在屏幕上的是包裹着控件的视觉树;其中视觉树与控件是可以分离的;比如控件中绑定的数据是10行,而视觉树可以显示3行。...相关文章: 【我们一起写框架】MVVM的WPF框架(一)—序篇 【我们一起写框架】MVVM的WPF框架(二)—绑定 To be continued——DataGrid Github地址:https://

    2.4K30

    Silverlight:双向绑定综合应用-自动更新集合汇总字段

    要在界面上用网格显示所有员工的姓名、工资,并且当操作用户在网格里对员工进行增减或修改其工资时,能自动汇总出员工工资的总和并显示出来。...每行“工资”字段对应的TextBox上,注册TextChanged或LostFocus事件,在输入值变化或失去焦点时,去更新总和。...这是很容易想到的办法,但是并不优雅,原因: 1、每行的TextBox上都要去绑定事件,并在xaml.cs上写代码处理类似 TextBoxTotal.text = company.SalaryTotal...这样界面逻辑代码与UI绑得太紧,应对变化的能力有限。比如以后将TextBox换成其它形式的控件,一旦并不支持TextChanged事件,原来的代码就得修改。...这样一来,界面UI部分就轻松多了,只需要简单的绑定即可。

    97150

    深入解析 DataGrid 过滤功能

    默认过滤 把一个IEnumerable数据源绑定到C1DataGrid上,设置CanUserFilter为true,就可以看到默认条件下的过滤结果。...而这一切,只需为FullTextSearchBehavior属性绑定一个控件,例如:TextBox控件,它就会为你自动完成剩下的工作。...可作为过滤条件的值以选择列表的形式显示,用户可以选择那些值显示,那些不显示,这为拥有唯一或者重复值的列提供了非常有效的过滤方式(例如:类别或类型列)。你可以通过两种方法实现多值过滤功能。...就像上面的多值过滤一样,你可以在XAML中通过设置Filter属性来定制过滤功能。...FilterLoading在每列的过滤器加载后触发,你可以在这个事件中设置自定义的过滤器。FilterOpened在过滤器被打开之后触发,此时可以动态设置一些选项的值。

    2.9K70

    VB6.0数据库开发五个实例——罗列的总结

    AbsolutePosition RecordCount)、运行数据更新过程、“前一记录”“后一记录”button、Unload事件 连接——检索——操作 实例三:使用数据绑定訪问数据...操作过程:设计应用程序窗口、编写功能代码、保存project 实例四:分页显示记录 特点:用记录集的分页特性进行记录分页 使用DataGrid...控件的数据绑定功能显示分页后的数据记录 设计分析:使用记录集的PageSize属性用于设置或返回一个记录也中可包括的记录条数。...两种方法显示记录页数据:使用DataGrid控件,不能直接将分页的记录集绑定到DataGrid控件上,可将当前记录页的数据拷贝到一个新的记录集中,然后再将其绑定到DataGrid控件上;使用MSFlexGrid...控件,执行时通过TextMatrix属性来显示数据。

    1.8K20

    C#-datagrid使用

    显示行详细信息 使用RowDetailsTemplate为行详细信息指定模板,选中某一行时,可以显示该行的详细信息。...{math}"; } } } 改变行颜色 通过Style设置颜色值,结合触发器我们可以按照一定的条件改变行的颜色,比如选中行时,获取鼠标移入行内时,代码如下...> DataGrid> 通过表格值改变行颜色 我们可以通过转换器IValueConverter 或者IMultiValueConverter获取到数据,然后根据你想要的条件进行颜色值的返回。...; using System.Windows.Media; namespace Demo.Common { /// /// 绑定多参数的值转换器 /// 将行放置到目标行上时,我们改变数据源的顺序即可,参考代码如下: //datagrid控件上启用拖拽,并添加事件 AllowDrop="True" PreviewMouseMove

    86000

    【我们一起写框架】MVVM的WPF框架(四)—DataGrid

    因为数据控件通过绑定UI控件后,已经将复杂的UI操作,变成了简单的数据逻辑操作了。 如果没有数据控件,那当我们实现一个控件联动时,就得在Xaml.cs文件中处理了。...所以,当然我们学习了DataGrid数据控件后,就可以更好的理解,数据控件的意义了。...控件不仅包含了基础属性,还包含了上一页,下一页,刷新,甚至过滤的功能。...应用很简单,只要设置好绑定,然后将读取的数据赋值给数据控件的ItemSource属性即可。...DataGrid的中级应用 我们在上面的代码中可以看到,DataGrid数据控件还包含了分页功能。那么如何实现分页功能呢。 很简单,我们只需要在Xaml页面多绑定几个属性即可实现。

    1.2K20

    《深入浅出WPF》——模板学习

    你一定会想到使用一个CheckBox控件来满足要求;再比如颜色值实际上是一串数字,而用户基本不可能只看这串数字就能想象出真正的颜色,而且用户也不希望只能靠输入字符来设置颜色值,这时,颜色值这一“数据内容...这个UserControl由一个Monster类型实例在背后支持,当设置这个实例的时候,界面元素将实例的属性值显示在各个控件里。...我们的办法是在TextBox上右击,在弹出菜单中选择Edit Template(编辑模板)->Edit a Copy(编辑副本)…,如图: ~~~~ 之所以不选择Create...(一般外部控件的绑定是Binding,可见内部控件的绑定与外部控件还是做了一定区分的)将自己的属性值关联在目标控件的某个属性上,必要的时候还可以添加Converter。...它们的作用范围如下图: (上文先讲的DataTemplate,给人感觉好像是控件属性绑定对象数据后再组合一样,而ControlTemplate就是把控件敲碎后改内部属性,这样一看DataTemplate

    5K10

    Silverlight学习(三)

    OneWay,不是一次绑定的意思哈,它指的是单向的绑定,控件值的改变不会影响数据源。比如DataGird中,我们改动了某一个数据,但是他的数据源并没有变化,当我们再次加载的时候,它还是显示原来的数据。...本文传递了需要查询的字段值,为控件绑定的CommandParameter="{Binding Text,ElementName=txtSearch}",也就是将txtSeatrch的值传递过去。...构造函数里面的初始化很重要,因为View中的DataContext的内容直接来自于构造函数。有时候,我们会发现已经为某个属性赋值了,但是在前台并没有绑定上,问题就是出在这里。...若我们仍使用在构造函数中实例化的userinfo对象,则会跑出异常。一个新的对象可以解决这样的问题。在插入成功后,通过lamda表达式来为属性重新赋值,使我们添加的数据能够及时的显示。...这里需要为DataGrid绑定selectitem,来获取我们选择行的值,在后台转换为userinfo类型。

    76380

    Silverlight:双向绑定综合应用-多集合的依赖绑定

    这是上一篇“Silverlight:双向绑定综合应用-自动更新集合汇总字段”的续篇。需求场景如下: 一个公司,有N个员工,逢年过节时要搞一些抽奖活动,最终要公告收奖名单。...”必须从公司的员工中选取,如果发现某位员工在公司的员工库里没有登记,也可以在这个界面上的员工列表中临时添加。...即:下面网格中的员工“姓名下拉框”数据来源,依赖于上面网格中的员工姓名记录。...(类似数据库中的主从表关系) 为了实现这种绑定,需要创建二个ViewModel类 EmployeePrizeViewModel类,用来实现下面一个网格的绑定,代码如下: using System.ComponentModel...salaryTotal = _employeeCollection.Sum(c => c.Salary); OnPropertyChanged("SalaryTotal");//工资总合重新计算后,

    87660

    VB.NET数据库编程基础教程

    将窗体绑定到数据后,就可以将窗体上的控件绑定到特定的数据元素。...最传统的数据绑定包括将文本框控件(TextBox)的Text属性绑定到数据源的列,还可以绑定Image控件的图形、控件的背景或窗体上任意控件的其他任意属性。...我们就可以将数据集绑定给控件来显示数据集中所包含的数据了。 2.绑定到DataGrid控件 (1)在窗体中增加一个DataGrid控件,调整其大小与窗体相符。...3.绑定到TextBox控件 在上面我们介绍的实例窗体frmtest上删除DataGrid控件,并清除frmtest_Load中的代码。按照 图所示设计程序界面。...其中DataSource表示指定的数据集;DisplayMember表示ComboBox组件显示的字段值;ValueMember表示ComboBox组件选择后的值。

    4.7K30

    : 制作一个备忘录(经典)

    02—内容详述 ①界面button的图标: 图标图片可以上网上下载,下载好以后放到项目目录中,然后在项目中找到你的图片——>右键包括在项目中——>再右键,点击属性: 复制到输出目录,更改为始终复制。...VerticalAlignment="Center" /> ② 数据源:这里我采用从xml读取并绑定到界面...wpf 自带的表格控件datagrid,相对好处理 <DataGridTextColumn Header="提醒时间" Binding="{Binding Path=DateTime,StringFormat...//选中方式是一行还是单元格 ShowIndicator //是否在每一行之前显示小方块 UseEvenRowBackground //隔行其背景颜色会有所区分 AllowScrollToFocusedRow...ShowVerticalLines //显示表格中每行每列垂直和水平线 IsColumnMenuEnabled //是否关闭右键列菜单 03—前台代码 直接上代码,比较简单,不展开讲解了: <UserControl

    1.7K20

    简单实现DataGrid使用CheckBox选择行

    以前写过几个方法实现这个功能,但最终还是选择了不继承DataGrid,所以再重新发布出来。 先显示最终结果,其中左边是错误的例子,右边才是正确的 ?...在DataGrid中使用CheckBox选择行时典型的错误就是CheckBox没有Binding到任何属性上,这样的话当拖动滚动条时CheckBox.IsChecked就会乱掉,如Demo中左边那个DataGrid...最直观的解决方法是禁用DataGrid的滚动条,或者在绑定的数据上添加一个用于绑定CheckBox的bool属性。...最终的实现方法是自定义一个包含DataGrid的DataGridTemplateColumn,而不需要重写DataGrid,这样的坏处就是每次调用需要多写一局代码,如果不想这样就继承DataGrid然后把这句代码写进去...在DataGrid.Columns中加入自定义的Column,然后在代码中关联DataGrid和这个Colum,就完成了: DataGrid ItemsSource="{Binding}"

    89430
    领券