簡體   English   中英

WPF,將數據添加到數據庫后如何更新/刷新UI

[英]Wpf, how to update/refresh ui after adding data to database

如何做到這一點,以便每當我向數據庫添加/更新/刪除數據時,UI都會更新(在wpf中)。 我正在使用實體框架+本地sql。 我有下列由EntityFramework生成的類:添加事務時:我需要/可以指定一個收款人和一個TransactionCategory對象。 公共部分類Transaction {public int TransactionId {get; 組; }

    [Column(TypeName = "money")]
    public decimal TransactionAmmount { get; set; }

    public int? TransactionCategoryId { get; set; }

    public int? PayeeId { get; set; }

    [Column(TypeName = "money")]
    public decimal? TotalAmmount { get; set; }

    public int? TransactionType { get; set; }

    [Column(TypeName = "date")]
    public DateTime? TransactionDate { get; set; }


    public virtual Payee Payee { get; set; }

    public virtual TransactionCategory TransactionCategory { get; set; }
}


public partial class Payee
{
    public Payee()
    {
        Bills = new HashSet<Bill>();
        Transactions = new HashSet<Transaction>();
    }

    public int PayeeId { get; set; }

    [Required]
    [StringLength(50)]
    public string PayeeName { get; set; }

    public bool HasAccounts { get; set; }

    [StringLength(50)]
    public string PayeePhone { get; set; }

    [StringLength(50)]
    public string PayeeAddress { get; set; }

    public virtual ICollection<Bill> Bills { get; set; }

    public virtual ICollection<Transaction> Transactions { get; set; }
}

public partial class TransactionCategory
{
    public TransactionCategory()
    {
        Bills = new HashSet<Bill>();
        Transactions = new HashSet<Transaction>();
    }

    [Key]
    public int CategoryId { get; set; }

    [Required]
    [StringLength(50)]
    public string CategoryName { get; set; }

    [Column(TypeName = "money")]
    public decimal CategoryExpenseLimit { get; set; }

    [Column(TypeName = "money")]
    public decimal CategoryExpense { get; set; }

    [Column(TypeName = "money")]
    public decimal CategoryIncome { get; set; }

    [StringLength(50)]
    public string Period { get; set; }

    public virtual ICollection<Bill> Bills { get; set; }

    public virtual ICollection<Transaction> Transactions { get; set; }
}

在他們的視圖模型中,我使用了添加數據的方法:

PayeeViewModel類:和要添加的方法。

 private void Update()
    {
        using (var context = new Ents())
        {
            if (this.Mode == Mode.Add)
            {
                if (string.IsNullOrEmpty(PayeeName))
                {
                    MessageBox.Show("A Payee Name must be entered");
                }
                else
                {      
                    PayeeModel payee = new PayeeModel() { ThePayee = { PayeeName = PayeeName, PayeeAddress = PayeeAddress, PayeePhone = PayeePhone, HasAccounts = PayeeHasAccount } };

                        context.Payees.Add(payee.ThePayee);
                        context.SaveChanges();

                }
            }
       }
   }

除了字段之外,TransactionCategoryViewModel更新方法相同。

在我的TransactionViewModel中:

我有一個收款人和一個類別列表:

收款人清單:

 private ObservableCollection<PayeeModel> payees;
        private PayeeModel selectedPayee;

        public ObservableCollection<PayeeModel> Payees
        {
            get { return payees; }
            set
            {
                payees = value;
                OnPropertyChanged("Payees");
            }
        }

        public PayeeModel SelectedPayee
        {
            get { return selectedPayee; }
            set { selectedPayee = value;
            OnPropertyChanged("SelectedPayee");
            }
        }

類別列表

private ObservableCollection<CategoryModelModel> categories;
        private CategoryModel selectedCategory;

        public ObservableCollection<CategoryModel> Categories
        {
            get { return payees; }
            set
            {
                payees = value;
                OnPropertyChanged("Categories");
            }
        }

        public CategoryModel SelectedCategory
        {
            get { return selectedCategory; }
            set { selectedCategory = value;
            OnPropertyChanged("SelectedCategory");
            }
        }

和TransactionViewModel的構造函數

  internal TransactionViewModel(TransactionModel transaction, IEventAggregator eventAggregator)
    {
        this.eventAggregator = eventAggregator;
        TransactionId = transaction.TheTransaction.TransactionId;
        ammount = (double)transaction.TheTransaction.TransactionAmmount;
        PayeeId = transaction.TheTransaction.PayeeId;

         GetCategories();
         GetPayees();
         SelectedPayee = payees.Where(i => i.ThePayee.PayeeId == PayeeId).First();
         SelectedCatgory = categories.Where(i => i.TheCategory.CategoryId == CategoryId).First();


    }

當我將收款人或交易類別添加到數據庫時,我希望它能反映在包含收款人或交易類別的所有視圖中。 例如,在TransactionView(用於添加/編輯交易)中,我在TransactionClass中有提到的字段和兩個組合框:一個綁定到“收款人”列表,一個綁定到CategoriesList。

問題是,如果我添加/刪除或更新了Payee / TransactionCategory,那么TransactionView中的組合框不會相應地更新。

TransactionView組合框:

   <Label Content="Payee" Grid.Row="2" Margin="3" />
        <ComboBox Grid.Column="1" Grid.Row="2" Margin="3" Width="100" ItemsSource="{Binding Payees}" SelectedItem="{Binding SelectedPayee}"
                  DisplayMemberPath="ThePayee.PayeeName"/>
        <Label Content="Category" Grid.Row="3" Margin="3" />
        <ComboBox Grid.Column="1" Grid.Row="3" Margin="3" Width="100" ItemsSource="{Binding Categories}" 
                  SelectedItem="{Binding SelectedCategory}"  DisplayMemberPath="TheCategory.CategoryName" />

回答所以它不會保持打開狀態。 我在啟動時創建了一個ObservableCollection,將其添加為資源,然后在需要它們的地方聲明了本地實例。

暫無
暫無

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

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