C# 自动更新数据网格-WPF C Caliburn Micro
@arcticwhite做了一件了不起的工作,帮助我达到了我现在在这篇文章中的观点: 我有一个小故障就可以让它工作了。首先,让我告诉你这个应用程序应该做什么。我有一个数据网格,其中填充了维修订单信息。每个维修订单类都有一个具有自己类的核销列表 该应用程序还有第二个数据网格,显示所选维修订单的所有注销。在arcticwhite的帮助下,我能够使这项工作正常进行 我的问题是,当我向所选维修订单添加新核销时,它不会自动显示在核销数据网格中 在ShellModelView主窗口中,这是注销Datagrid绑定到的集合的代码:C# 自动更新数据网格-WPF C Caliburn Micro,c#,wpf,xaml,caliburn.micro,C#,Wpf,Xaml,Caliburn.micro,@arcticwhite做了一件了不起的工作,帮助我达到了我现在在这篇文章中的观点: 我有一个小故障就可以让它工作了。首先,让我告诉你这个应用程序应该做什么。我有一个数据网格,其中填充了维修订单信息。每个维修订单类都有一个具有自己类的核销列表 该应用程序还有第二个数据网格,显示所选维修订单的所有注销。在arcticwhite的帮助下,我能够使这项工作正常进行 我的问题是,当我向所选维修订单添加新核销时,它不会自动显示在核销数据网格中 在ShellModelView主窗口中,这是注销Datagr
public BindableCollection<WriteOff> WriteOffs
{
get {
return GetWriteOffs();
}
}
public RepairOrder SelectedRepairOrder
{
get { return _selectedRepairOrder; }
set
{
if (_selectedRepairOrder == value) return;
_selectedRepairOrder = value;
NotifyOfPropertyChange(() => SelectedRepairOrder);
NotifyOfPropertyChange(() => WriteOffs);
}
}
选定维修单绑定到的特性:
public BindableCollection<WriteOff> WriteOffs
{
get {
return GetWriteOffs();
}
}
public RepairOrder SelectedRepairOrder
{
get { return _selectedRepairOrder; }
set
{
if (_selectedRepairOrder == value) return;
_selectedRepairOrder = value;
NotifyOfPropertyChange(() => SelectedRepairOrder);
NotifyOfPropertyChange(() => WriteOffs);
}
}
维修订单类别:
public class RepairOrder
{
public string ControlNumber { get; set; }
public double Value { get; set; }
public string Note { get; set; }
public string Schedule { get; set; }
public int Age { get; set; }
private List<WriteOff> _myWriteOffs;
public List<WriteOff> GetMyWriteOffs()
{
return _myWriteOffs;
}
public void AddMyWriteOff(WriteOff value)
{ _myWriteOffs.Add(value); }
public RepairOrder(string CN, string SC, double VL)
{
ControlNumber = CN;
Schedule = SC;
Value = Math.Round(VL, 2);
Note = null;
_myWriteOffs = new List<WriteOff>();
}
public RepairOrder()
{
_myWriteOffs = new List<WriteOff>();
}
public static RepairOrder FromCSV(string CSVLine, string Sched)
{
string[] values = CSVLine.Split(',');
RepairOrder rep = new RepairOrder();
rep.ControlNumber = values[2];
rep.Value = Math.Round(double.Parse(values[5]),2);
rep.Age = int.Parse(values[4]);
rep.Schedule = Sched;
return rep;
}
}
这也是“添加核销”按钮绑定的方法
double WOA;
if (SelectedAccount == null)
{
MessageBox.Show("Please select a Write off Account, Description and amount", "Incorrect Write Off Information", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
if (SelectedWODescription == null)
{
MessageBox.Show("Please select a Write off Account, Description and amount", "Incorrect Write Off Information", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
if (WriteOffAmount == null)
{
MessageBox.Show("Please select a Write off Account, Description and amount", "Incorrect Write Off Information", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
else
{
WOA = Double.Parse(WriteOffAmount);
if (WOA == 0)
{
MessageBox.Show("Write off can not be $0.00", "Incorrect Write Off Amount", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
}
//Check if there is a selected repair order
if (SelectedRepairOrder == null)
{
MessageBox.Show("Please select a Repair Order to write this off to", "No RO Selected", MessageBoxButton.OK);
return;
}
WOA = Double.Parse(WriteOffAmount);
WriteOff tempWO = new WriteOff(SelectedAccount, SelectedWODescription, WOA);
SelectedRepairOrder.AddMyWriteOff(tempWO);
WriteOffs.Add(tempWO);
//MessageBox.Show(SelectedAccount + Environment.NewLine + SelectedWODescription + Environment.NewLine + WriteOffAmount, "Test", MessageBoxButton.OK);
//MessageBox.Show(tempWO.Account + Environment.NewLine + tempWO.Description + Environment.NewLine + tempWO.WriteOffAmount, ToString());
}
我需要做什么才能使核销数据网格自动填充添加的核销?现在,如果我在维修单网格中选择另一行并返回到第一行,则会显示新的注销 又是我:]
调用WriteOffs.AddtempWO后
只需添加NotifyOfPropertyChange=>WriteOffs 像往常一样,你真是太棒了!我不认为NotifyOfPropertyChange是一个命令,而认为NotifyOfPropertyChange是在setters和getters Java Speak中执行的。我比Java更喜欢C和WPF,但是事情处理方式的改变让我很痛苦。这实际上帮助我解决了另一个类似的故障!我很高兴听到这个消息,也很高兴我能帮上忙:
double WOA;
if (SelectedAccount == null)
{
MessageBox.Show("Please select a Write off Account, Description and amount", "Incorrect Write Off Information", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
if (SelectedWODescription == null)
{
MessageBox.Show("Please select a Write off Account, Description and amount", "Incorrect Write Off Information", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
if (WriteOffAmount == null)
{
MessageBox.Show("Please select a Write off Account, Description and amount", "Incorrect Write Off Information", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
else
{
WOA = Double.Parse(WriteOffAmount);
if (WOA == 0)
{
MessageBox.Show("Write off can not be $0.00", "Incorrect Write Off Amount", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
}
//Check if there is a selected repair order
if (SelectedRepairOrder == null)
{
MessageBox.Show("Please select a Repair Order to write this off to", "No RO Selected", MessageBoxButton.OK);
return;
}
WOA = Double.Parse(WriteOffAmount);
WriteOff tempWO = new WriteOff(SelectedAccount, SelectedWODescription, WOA);
SelectedRepairOrder.AddMyWriteOff(tempWO);
WriteOffs.Add(tempWO);
//MessageBox.Show(SelectedAccount + Environment.NewLine + SelectedWODescription + Environment.NewLine + WriteOffAmount, "Test", MessageBoxButton.OK);
//MessageBox.Show(tempWO.Account + Environment.NewLine + tempWO.Description + Environment.NewLine + tempWO.WriteOffAmount, ToString());
}