簡體   English   中英

自動更新數據網格 - WPF C# Caliburn Micro

[英]Auto updating a datagrid - WPF C# Caliburn Micro

@arcticwhite 做了一項了不起的工作,幫助我達到了我現在在這篇文章中的觀點: 將 DataGrid 綁定到第二個數據網格 WPF Caliburn.Micro 的 selectedrow 對象

我已經能夠通過一個小故障讓它工作。 首先,讓我告訴你這個應用程序應該做什么。 我有一個填充了維修訂單信息的 Datagrid。 每個維修訂單類都有一個“WriteOffs”列表(注銷有自己的類。

該應用程序有第二個 Datagrid,顯示所選維修訂單的所有注銷。 在 arcticwhite 的幫助下,我能夠完成這項工作。

我的問題是,當我向選定的維修訂單添加新的注銷時,它不會自動顯示在注銷 Datagrid 中。

在 ShellModelView(主窗口)中,這是注銷 Datagrid 綁定到的集合的代碼:

public BindableCollection<WriteOff> WriteOffs
        {
            get {

                return GetWriteOffs();
            }

        }

注銷集合中的方法調用

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; }
        }

如果注銷,下面的行返回一個“列表” - 這就是循環的目的。

SelectedRepairOrder.GetMyWriteOffs()

所選維修訂單綁定的屬性:

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;
        }



    }

注銷類:

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;
        }
    }

這也是“添加注銷”按鈕綁定的方法。

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.Add(tempWO);

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM