2017-02-08 3 views
-1

​​3210が渡す情報をViewに保存するにはどうすればよいですか?この情報がデータベースに保存されている必要がありますが、値が取得されていることを確認するために、値が取得されているかどうかを表示するようにMessageBoxを設定しました。ビューモデルがビューに読み込まれるWPFデータの保存

これは私のViewModel /モデルのコードです:、

<TextBlock Foreground="Black" Margin="0 0 0 0" VerticalAlignment="Top" Grid.Column="3" Text="{Binding Path=Amount, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 

あなたが見るすべての計算正常に動作し、すべての値が上を通過:Amountため

namespace OcelotPayroll 
{ 
    public class PayslipModel : EmployeeModel 
    { 

     private decimal statIncome; 
     private string totalDed; 
     private string _netpay; 
     private string _amount; 

     public string Amount 
     { 
      get 
      { 
       return _amount; 
      } 
      set 
      { 
       _amount = value; 
       OnPropertyChanged("Amount"); 
      } 
     } 


     public decimal StautoryIncome 
     { 
      get 
      { 
       return statIncome; 
      } 
      set 
      { 
       statIncome = value; 
      } 
     } 

     public PayslipModel() 
     { 

      Date = DateTime.Today.Date; 

      SelectAll = new DelegateCommand(Select,() => CanSelect); 

      UnSelectAll = new DelegateCommand(UnSelect,() => CanUnSelect); 

      SaveToDatabase = new DelegateCommand(Save,() => CanSave); 

      scon = new MichaelAllenEntities(); 

     } 

     public ICommand SaveToDatabase 
     { 
      get; set; 
     } 

     private bool CanSave 
     { 
      get { return Workspaces.Count > 0; } 
     } 

     private async void Save() 
     { 
      try 
      { 
       MessageBox.Show(StautoryIncome.ToString()); //returns 0 
       MessageBox.Show(Amount.ToString()); //NullPointerException 
      } 
      catch (DbEntityValidationException ex) 
      { 
       foreach (var en in ex.EntityValidationErrors) 
       { 
        var exceptionDialog = new MessageDialog 
        { 
         Message = { Text = string.Format("{0}, {1}", en.Entry.Entity.GetType().Name, en.Entry.State) } 
        }; 

        await DialogHost.Show(exceptionDialog, "RootDialog"); 

        foreach (var ve in en.ValidationErrors) 
        { 
         exceptionDialog = new MessageDialog 
         { 
          Message = { Text = string.Format("{0}, {1}", ve.PropertyName, ve.ErrorMessage) } 
         }; 

         await DialogHost.Show(exceptionDialog, "RootDialog"); 
        } 
       } 
      } 
      catch(Exception ex) 
      { 
       var exceptionDialog = new MessageDialog 
       { 
        Message = { Text = string.Format("{0}", ex) } 
       }; 

       await DialogHost.Show(exceptionDialog, "RootDialog"); 
      } 

     } 

     public async void CalcNis() 
     { 
      try 
      { 
       float nis = 0; 

       NisName = "N.I.S."; 

       SqlConnection con = new SqlConnection(scon.Database.Connection.ConnectionString); 
       con.Open(); 
       SqlCommand cmd = new SqlCommand("select NIS from Deductions where TaxId='1'", con); 

       SqlDataReader sdr = cmd.ExecuteReader(); 
       while (sdr.Read()) 
       { 
        nis = float.Parse(sdr.GetValue(0).ToString()); 
       } 

       con.Close(); 

       if (Amount != string.Empty) 
       { 
        NisVal = (decimal.Parse(Amount.ToString()) * decimal.Parse(nis.ToString())).ToString("N2"); 
        StautoryIncome = (decimal.Parse(Amount.ToString()) - decimal.Parse(NisVal.ToString())); //value gets assigned here 
       } 
      } 
      catch(Exception ex) 
      { 
       var exceptionDialog = new MessageDialog 
       { 
        Message = { Text = ex.ToString() } 
       }; 

       await DialogHost.Show(exceptionDialog, "RootDialog"); 
      } 
     } 

    } 
} 

データバインディングViewに完全に。しかし私が貯蓄しようとすると、Object Reference not set to instance of an objectExceptionが得られます。

データベースに保存するためにビューから値を取得するにはどうすればよいですか?

を編集してください。わかりましたので、わかりやすくするためにコードを更新しました。この行のエラーはMessageBox.Show(StautoryIncome.ToString());です。これは、CalcNis()メソッドで計算された値を保持し、同じ値で他の計算を実行します。しかし、保存しようとすると、StautoryIncomeは0を返し、データバインディングのどれもNullPointerExceptionを返します。 Amountのバインドは、Textboxにテキストを入力するとすぐに、同じ値のTextBlockの更新が完了すると完全に機能します。

+0

あなたはそれをデバッグする必要があります、ビジュアルスタジオはあなたに何があるか教えてくれます –

+0

何が起こっているか見るために私たちのためにビューを表示する必要がありますが、あなたはオブジェクト== nullをどこかに持っています。また、デバッガが問題を報告している正確な行を強調表示するのに役立ちます。 – Kelly

+0

コードがどこに間違っているかを示す[最小再現可能な例](http://stackoverflow.com/help/mcve)を教えてください。 – JSteward

答えて

0

この問題は、UserControlsがViewModelの同じインスタンスを使用していないことが判明しました。ディスカッションはUnable to retrieve binding values MVVMに移りました。誰かがそれが有用であることを願っています。

関連する問題