c# - WPF बाध्यकारी मूल्यों को प्राप्त करने में असमर्थ MVVM



(1)

जब मैं Textbox में पाठ दर्ज करता हूँ, तो यह एक ही समय में दो Textbox अपडेट करता है मैं उस मान को एसक्यूएल डाटाबेस में सहेजने के लिए कोशिश कर रहा हूँ मैंने इसे अस्थायी रूप से एक संदेश बॉक्स में मान प्रदर्शित करने के लिए सेट किया है।

ViewModel / मॉडल:

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" />

टेक्स्टबॉक्स् बाध्यकारी:

<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 , जो TabLayout की सामग्री को TabItems ; और पेरोल जिसमें बचत बटन और एक TabLayout जो प्रत्येक TabItem में TabLayout को लोड करता है।

दोनों के लिए डेटाकॉन्टेक्स्ट है:

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

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

यदि आप चाहते हैं कि App.Xaml.cs को साझा करने के लिए दोनों नियंत्रण होते हैं तो आप अपनी संरचना रूट से एक उदाहरण इंजेक्ट कर सकते हैं, अर्थात 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;
}




mvvm