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 object
Exception
が得られます。
データベースに保存するためにビューから値を取得するにはどうすればよいですか?
を編集してください。わかりましたので、わかりやすくするためにコードを更新しました。この行のエラーはMessageBox.Show(StautoryIncome.ToString());
です。これは、CalcNis()
メソッドで計算された値を保持し、同じ値で他の計算を実行します。しかし、保存しようとすると、StautoryIncome
は0を返し、データバインディングのどれもNullPointerException
を返します。 Amount
のバインドは、Textbox
にテキストを入力するとすぐに、同じ値のTextBlock
の更新が完了すると完全に機能します。
あなたはそれをデバッグする必要があります、ビジュアルスタジオはあなたに何があるか教えてくれます –
何が起こっているか見るために私たちのためにビューを表示する必要がありますが、あなたはオブジェクト== nullをどこかに持っています。また、デバッガが問題を報告している正確な行を強調表示するのに役立ちます。 – Kelly
コードがどこに間違っているかを示す[最小再現可能な例](http://stackoverflow.com/help/mcve)を教えてください。 – JSteward