Winform एप्लिकेशन में आप तर्क से कैसे अलग होते हैं?


18

मुझे पता है कि तर्क से अलग देखने के लिए MVC जैसे पैटर्न हैं, हालांकि, मुझे नहीं पता कि वे Winform अनुप्रयोगों में कितने सामान्य हैं।

C # Winform एप्लिकेशन के लिए, मैं एक के साथ शुरू कर सकता हूं Formऔर धीरे-धीरे इसमें UI घटकों को जोड़ सकता हूं , फिर घटकों की घटनाओं के लिए, ( click, textchanged...) मैं अपने कार्यों को कॉल करता हूं, या सीधे अपने तर्क लिखता हूं!

मुझे पता है कि यह एक बुरी आदत है, लेकिन मुझे नहीं पता कि विज़ुअल स्टूडियो (एक टेम्पलेट, एक फ्रेमवर्क, शुरुआती बिंदु) में ऐसी परियोजना शुरू करने का सबसे अच्छा तरीका क्या है, क्या एमवीसी एकमात्र समाधान है? मैं किसी भी परियोजना के लिए यह करना चाहिए ?!

मैं आरंभ करने के लिए कुछ दिशानिर्देश या हल्के ढांचे प्राप्त करना चाहूंगा।


2
यहाँ आप क्या देख रहे हैं के लिए एक पूरा ट्यूटोरियल है: codebetter.com/jeremymiller/2007/07/26/…
डॉक्टर ब्राउन

जवाबों:


25

MVVM (मॉडल-व्यू-व्यूमॉडल) पैटर्न में इस्तेमाल किया जा सकता है Winforms

नमूना

public class Person
{
    public string FirstName {get; set;}
    public string LastName {get; set;}
}

ViewModel

public class PersonViewModel : INotifyPropertyChanged
{
    private Person _Model;

    public string FirstName
    {
        get { return _Model.FirstName; }
        set(string value)
        {
            _Model.FirstName = value;
            this.NotifyPropertyChanged("FirstName");
            this.NotifyPropertyChanged("FullName"); //Inform View about value changed
        }
    }

    public string LastName
    {
        get { return _Model.LastName; }
        set(string value)
        {
            _Model.LastName = value;
            this.NotifyPropertyChanged("LastName");
            this.NotifyPropertyChanged("FullName");
        }
    }

    //ViewModel can contain property which serves view
    //For example: FullName not necessary in the Model  
    public String FullName
    {
        get { return _Model.FirstName + " " +  _Model.LastName; }
    }

    //Implementing INotifyPropertyChanged
    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

राय

public class PersonView: Form
{
    //Add two textbox and one label to the form
    //Add BindingSource control which will handle 
    //ViewModel and Views controls changes


    //As viewmodel you can use any type which of course have same named properties
    public PersonView(Object viewmodel)
    {
        this.InitializeComponents();

        this.ViewModelBindingSource.DataSource = viewmodel;
        this.InitializeDataBindings();
    }

    private void InitializeDataBindings()
    {
        this.TextBoxFirstName.DataBindings.Add("Text", this.ViewModelBindingSource, "FirstName", true);
        this.TextBoxLastName.DataBindings.Add("Text", this.ViewModelBindingSource, "LastName", true);
        this.LabelFullName.DataBindings.Add("Text", this.ViewModelBindingSource, "FullName", true);
    }
}

MSDN से Winforms में डेटाबाइंडिंग के बारे में और पढ़ें


0

स्पष्ट रूप से WinForms मूल रूप से एक डिज़ाइन पैटर्न का दूसरे पर समर्थन नहीं करता है - वह जो काम नहीं कर सकता है वह MVVM है क्योंकि आप डेटा को व्यू मॉडल से "बाइंड" नहीं कर सकते हैं और यह डेटा को सीधे अपडेट करता है।

अन्यथा - मैं एमवीपी के साथ WinForms का प्रयास करूंगा - मैंने देखा है कि पहले किया है - यहाँ https://winformsmvp.codeplex.com/ देखने के लिए एक लिंक है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.