DataBinding到计算字段

我遇到了一个小问题,我正在尝试将DataGrid的DataTextColumn绑定到计算字段。

WPF

          

Student是一个Entity对象,只有一个小的加法。 TotalCosts不是db表中的字段,因此我为此创建了一个partial类。

 public partial class Student { public Decimal TotalCosts { get { return (LodgingCosts + RegistrationCosts + TravelCosts + DiningCosts); } } } 

我遇到的问题是,当您填写任何其他字段时,TotalCosts不会自动更新。 我的猜测是因为它没有被列为依赖属性。 如何为没有设置的属性解决此问题?

您可以在TotalCosts依赖的每个属性的setter中调用OnPropertyChanged("TotalCosts") ,它将刷新绑定

我假设学生实现了INotifyPropertyChanged。 你要做的就是注册LodgingCosts + RegistrationCosts + TravelCosts + DiningCosts的PropertyChanged事件,并为TotalCosts举起PropertyChanged事件。

 public partial class Student { public Decimal TotalCosts { get { return (LodgingCosts + RegistrationCosts + TravelCosts + DiningCosts); } } public Student() { this.PropertyChanged += new PropertyChangedEventHandler(Student_PropertyChanged); } void Student_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == "LodgingCosts" || e.PropertyName == "RegistrationCosts" || e.PropertyName == "TravelCosts" || e.PropertyName == "DiningCosts") { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("TotalCosts")); } } } 

您好o我想我可以帮助您在sqlServer中为数据库提供此代码,并且我有一个带有DataSet的数据源用于我的数据库

 using System; using System.Collections.Generic; using System.Linq; using System.Text; 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; using TestDeDataGrid.TestDSTableAdapters; namespace TestDeDataGrid { public partial class MainWindow : Window { //private ICollection registros; public MainWindow() { InitializeComponent(); TestDS ds = new TestDS(); TablaTestTableAdapter adapter = new TablaTestTableAdapter(); adapter.Fill(ds.TablaTest); TablaTestGrid.ItemsSource = ds.TablaTest.DefaultView; } private void TablaTestGrid_CurrentCellChanged(object sender, EventArgs e) { if ((String)(((DataGrid)sender).CurrentColumn.Header) == "A/B") ((DataGrid)sender).CommitEdit(DataGridEditingUnit.Row, true); } } } 

有了这个技巧,我在列A和B中有一个值后自动计算C列,例如,如果我在columna A中放置10,在B列中放置5,那么我只需按Tab键移动到columnC,值2自动出现无需单击其他行或按Enter键。

ColumnC是表达式(ColumnaA / ColumnaB)和System.Decimal类型的计算列。

还有我的xaml代码:

          

您需要在类上实现INotifyPropertyChanged 。 这是一个例子:

 public class Person : INotifyPropertyChanged { //public int Id //{ get; set; } //public string Name { get; set; } private int _Id; public int Id { get { return _Id; } set { _Id = value; RaisePropertyChanged("Id"); } } private string _EmpNo { get { return Id.ToString() + Name.ToString(); } } private string _Name; public string Name { get { return _Name; } set { _Name = value; RaisePropertyChanged("Name"); } } private void RaisePropertyChanged(string property) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(property)); } public event PropertyChangedEventHandler PropertyChanged; } 

XAML代码:

      

测试:

 public TestWindow() { InitializeComponent(); this.DataContext = this; } private Person _P1 = new Person(); public Person P1 { get { return _P1; } set { _P1 = value; } } private void Button_Click(object sender, RoutedEventArgs e) { } 

在2个文本框中键入内容…并在按钮上单击查看人员的值P1 ..将找到带有值的计算字段..希望它有助于你…谢谢,BHavik