WPF无法检索MVVM的绑定值

当我在Textbox输入文本时,它会同时更新两个TextBlocks 。 我正在尝试检索该值以将其保存到SQL数据库。 我暂时将其设置为在MessageBox中显示值。

视图模型/型号:

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

TextBox绑定:

  

TextBlocks绑定:

   

SaveCommand:

 private async void Save() { try { MessageBox.Show(string.Format("{0}", Amount)); } 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"); } } 

当我点击保存时, MessageBox显示0。

编辑:我刚才记得我将ViewModel连接到两个UserControls 。 我的TabLayout ,它处理TabItems的内容; 和Payroll包含保存按钮和TabControl ,它将TabLayout加载到每个TabItem

两者的DataContext是:

 public TabLayout() { InitializeComponent(); DataContext = new PayslipModel(); } public Payroll() { InitializeComponent(); DataContext = new PayslipModel(); } 

如果您希望两个控件共享一个DataContext那么您可以从组合根注入一个实例,即App.Xaml.cs以下可能与您的应用程序的布局方式不符,但应该给您一个想法。 在路上,您可以查看dependency injection以及如何编写对象图,但这是一个开始。

App.xaml中

     

App.xmal.cs

 public partial class App : Application { private void OnAppStartup(object sender, StartupEventArgs e) { Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose; var vm = new PayslipModel(); var mainWindow = new MainWindow(vm); Application.Current.MainWindow = mainWindow; mainWindow.Show(); } } 

MainWindow.xaml.cs

 public MainWindow(PayslipModel vm){ InitializeComponent(); tabControl = new TabControl(vm); payRoll = new PayRoll(vm); } 

用户控件

 public TabLayout(PayslipModel vm) { InitializeComponent(); DataContext = vm; } public Payroll(PayslipModel vm) { InitializeComponent(); DataContext = vm; }