मैंने एक ऐसा पृष्ठ बनाया है जो एक नए पृष्ठ पर एक मान पास करता है जो उपयोगकर्ताओं को डेटा अपडेट करने की अनुमति देगा। जब उपयोगकर्ता अद्यतन किए जाने वाले रिकॉर्ड का चयन करता है तो संपादन प्रपत्र खुलता है लेकिन डेटा दिखाई नहीं देता है। यदि मान बदल दिया गया है और संपादन बटन पर क्लिक किया गया है तो यह मान को अपडेट कर देगा, लेकिन यह कभी दिखाई नहीं देता है। मैं वह डेटा कैसे दिखा सकता हूं जिसे संपादित किया जाना है?

मॉडल देखें

namespace QiApp.ViewModels
{
    public class EditTodayCasesViewModel
    {
        private SxCaseDataService _sxCaseDataService = new SxCaseDataService();

        public SxCase SelectedSxCase { get; set; }

        public ICommand EditSxCaseCommand => new Command(async () =>
            {
               await _sxCaseDataService.PutSxCase(SelectedSxCase.SxCaseId, SelectedSxCase);
            });
    }
}

पेज xaml संपादित करें

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:viewModels="clr-namespace:QiApp.ViewModels;assembly=QiApp.UWP"
             x:Class="QiApp.Views.EditTodayCasePage">
    <ContentPage.BindingContext>
        <viewModels:EditTodayCasesViewModel/>
    </ContentPage.BindingContext>

    <StackLayout>
        <Label Text="Surgery Case"/>
        <Label Text="{Binding SelectedSxCase.SxCaseId}"/>
        <Entry Text="{Binding SelectedSxCase.Record}"/>
        <Switch IsToggled="{Binding SelectedSxCase.Complete}"/>
        <Button Text="Edit Surgery Case"
                Command="{Binding EditSxCaseCommand}"/>
    </StackLayout>
</ContentPage>

पीछे कोड

namespace QiApp.Views
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class EditTodayCasePage : ContentPage
    {


        public EditTodayCasePage(SxCase sxCase)
        {
            InitializeComponent();

            var editTodayCasesViewModel = BindingContext as EditTodayCasesViewModel;

            editTodayCasesViewModel.SelectedSxCase = sxCase;


        }
    }
}
0
Brady 3 मई 2018, 23:26

1 उत्तर

सबसे बढ़िया उत्तर

सब कुछ ठीक है सिवाय इसके कि आपका विचार एक दृश्य मॉडल के लिए बाध्य हो जाता है जो गुण बदल जाने पर चुप रहता है। आपके विचार को इस बारे में कोई जानकारी नहीं मिल सकती है कि उसे कब खुद को अपडेट करना चाहिए और इसलिए जैसे ही संपत्ति SelectedSxCase बदल जाती है, यूआई।

शुक्र है कि यह केवल सामान्य इंटरफ़ेस INotifyPropertyChanged को लागू करने और इंटरफ़ेस द्वारा प्रदान की जाने वाली घटना को बढ़ाने वाली कोड लाइन के साथ अपनी बाध्य संपत्तियों को विस्तारित करके बहुत आसानी से किया जा सकता है।

मूल रूप से यह इस प्रकार है ...

private SxCase _case;
public SxCase SelectedSxCase 
{ 
    get => _case; 
    set
    {
        _case = value;
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SelectedSxCase)));
    }
}

... लेकिन इसे और अधिक सुरुचिपूर्ण बनाने के लिए कई कार्यान्वयन हैं जैसे CallerMemberName या यहां तक ​​कि फोडी के साथ गेट्टर और सेटर को स्वचालित रूप से बुनना

0
Waescher 3 मई 2018, 23:58