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