2017-02-08 48 views
0

當我將文本輸入到Textbox中時,它同時更新兩個TextBlocks。我試圖檢索該值以將其保存到SQL數據庫。我已經暫時設置它在MessageBox中顯示值。WPF無法檢索綁定值MVVM

視圖模型/型號:

private decimal _amount; 

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

文本框綁定:

<TextBox MaxLength="7" Visibility="{Binding Hide1, Converter={StaticResource BoolToVis},FallbackValue=Visible}" Text="{Binding Amount, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Row="2" /> 

的TextBlocks裝訂:

<TextBlock Foreground="Black" Margin="0 0 0 0" VerticalAlignment="Top" Grid.Column="3" Text="{Binding Path=Amount}"/> 
<TextBlock Grid.Column="3" Text="{Binding Amount}" Foreground="Black" Margin="0 0 0 0" VerticalAlignment="Bottom"/> 

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的內容;和包含保存按鈕和TabControl的工資單,其將TabLayout加載到每個TabItem中。

DataContext的兩個是:

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

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

這裏的所有代碼都是同一類的一部分嗎?你確定它都是在同一個類的實例上運行嗎?你嘗試過調試嗎? –

+0

您如何將datacontext設置爲您的ViewModel實例? –

+0

@TaiT的我把它設置在代碼隱藏中,就像這個'DataContext = new PayslipModel();' – bruh1234

回答

1

如果要同時控制共享DataContext,那麼你可以從你的作文根注入的情況下,即App.Xaml.cs下可能的方式不符合您的應用程序奠定了,但應該給你的想法。在路上你可以看看依賴注入和如何組成你的對象圖,但這是一個開始。

的App.xaml

<Application x:Class="App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     
      Startup="OnAppStartup"> 
    <Application.Resources> 

    </Application.Resources> 
</Application> 

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

UserControls

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

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

我其實做了不同的事情,但我做了類似於你發佈的東西,所以它也應該工作。再次感謝您的幫助:) – bruh1234