首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动更新数据网格- WPF C# Caliburn Micro

自动更新数据网格- WPF C# Caliburn Micro
EN

Stack Overflow用户
提问于 2018-02-05 10:26:38
回答 1查看 517关注 0票数 1

@arcticwhite做了一个令人惊叹的工作,帮助我达到了我现在在这篇文章中的观点:Bind a DataGrid to the selectedrow object of a second datagrid, WPF Caliburn.Micro

我已经能够让它在一个小故障下工作。首先,让我告诉你这个应用程序应该做什么。我有一个填充了维修单信息的Datagrid。每个维修单类别都有一个"WriteOffs“列表(核销具有自己的类别。

该应用程序有第二个Datagrid,它显示所选维修单的所有注销。在北极白的帮助下,我成功地完成了这项工作。

我的问题是,当我将新的核销添加到选定的维修单时,它不会自动显示在核销数据网格中。

在ShellModelView (主窗口)中,这是注销数据网格绑定到的集合的代码:

代码语言:javascript
复制
public BindableCollection<WriteOff> WriteOffs
        {
            get {

                return GetWriteOffs();
            }

        }

注销集合中的方法调用

代码语言:javascript
复制
public BindableCollection<WriteOff> GetWriteOffs()
        {
            BindableCollection<WriteOff> temp = new BindableCollection<WriteOff>();
            if (SelectedRepairOrder != null)
            {
                if (SelectedRepairOrder.GetMyWriteOffs() != null)
                {
                    foreach (var item in SelectedRepairOrder.GetMyWriteOffs())
                    {
                        temp.Add(item);

                    }
                    return temp;
                }
                else { return null; }
            }
            else { return null; }
        }

下面的代码行返回一个"List“if write offs -这就是循环的目的。

代码语言:javascript
复制
SelectedRepairOrder.GetMyWriteOffs()

所选维修单绑定的属性:

代码语言:javascript
复制
public RepairOrder SelectedRepairOrder
        {
            get { return _selectedRepairOrder; }
            set
            {
               if (_selectedRepairOrder == value) return;
                _selectedRepairOrder = value;
                NotifyOfPropertyChange(() => SelectedRepairOrder);
                NotifyOfPropertyChange(() => WriteOffs);

            }
        }

维修单分类:

代码语言:javascript
复制
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;
        }



    }

核销类:

代码语言:javascript
复制
public class WriteOff
    {
        public string Account { get; set; }
        public string Description { get; set; }
        public double WriteOffAmount { get; set; }

        public WriteOff(string Acct, string Desc, double Amount)
        {
            Account = Acct;
            Description = Desc;
            WriteOffAmount = Amount;
        }
    }

这是“添加注销按钮也被绑定”的方法。

代码语言:javascript
复制
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());

        }

我需要做什么才能让“注销”数据网格自动填充添加的注销?按照现在的工作方式,如果我在repair order网格中选择另一行并返回到第一行,则会显示新的注销。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-05 14:47:11

又是我:]

在调用WriteOffs.Add(tempWO);之后

只需添加NotifyOfPropertyChange(() => WriteOffs);

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

https://stackoverflow.com/questions/48615068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档