दिलचस्प पोस्ट
क्या जावास्क्रिप्ट स्विच वक्तव्य में सख्त तुलना करने के लिए सुरक्षित है? शेल में, "2> और 1" क्या मतलब है? मैं कैसे जांच सकता हूँ कि जावास्क्रिप्ट चर फ़ंक्शन प्रकार है? किसी सदस्य के लिए गैर-डिफॉल्ट कन्स्ट्रक्टर का आप कैसे उपयोग करते हैं? स्विफ्ट में ऑब्जेक्ट क्लास एट्रिब्यूट्स पर पुनरावृत्त करें यह चार क्या है? 65279 '' क्यों नहीं: पहले और: छद्म तत्वों के बाद `img` तत्वों के साथ काम करते हैं? एक सरणी में सबसे अधिक मूल्य ढूँढना सबसे कुशलतापूर्वक कॉर्स पहुंच-नियंत्रण-अनुमति-हेडर्स वाइल्डकार्ड को अनदेखा किया जा रहा है? Image.open () छवि फ़ाइल की पहचान नहीं कर सकता – पायथन? कैसे एक बास चर से व्हाइटस्पेस ट्रिम करने के लिए? iBeacon अधिसूचना जब ऐप नहीं चल रहा है एक्सप्रेस में पूर्ण यूआरएल कैसे प्राप्त करें? सी बुरा अभ्यास में लचीला सरणी के सदस्यों का उपयोग कर रहे हैं? अनगिनत सीग्यू के साथ डेटा पास करना

एमवीवीएम पैटर्न का उपयोग करके प्रगति पट्टी को कैसे लागू किया जाए

मेरे पास एक WPF अनुप्रयोग है जो MVVM डिज़ाइन पैटर्न पर बनाया गया है।

मैं ऐप में प्रगति बार को लागू करना चाहता हूं, जो कि एमवीवीएम पैटर्न का पालन करता है।

क्या यह किसी को लागू करने के बारे में कोई सुझाव है?

अग्रिम में धन्यवाद

Solutions Collecting From Web of "एमवीवीएम पैटर्न का उपयोग करके प्रगति पट्टी को कैसे लागू किया जाए"

आम तौर पर आपका UI आपके वीएम में गुणों को बाध्य करेगा:

<ProgressBar Value="{Binding CurrentProgress, Mode=OneWay}" Visibility="{Binding ProgressVisibility}"/> 

आपका वीएम BackgroundWorker पर काम करने के लिए BackgroundWorker का उपयोग करेगा और समय-समय पर CurrentProgress मान को अपडेट करेगा। कुछ इस तरह:

 public class MyViewModel : ViewModel { private readonly BackgroundWorker worker; private readonly ICommand instigateWorkCommand; private int currentProgress; public MyViewModel() { this.instigateWorkCommand = new DelegateCommand(o => this.worker.RunWorkerAsync(), o => !this.worker.IsBusy); this.worker = new BackgroundWorker(); this.worker.DoWork += this.DoWork; this.worker.ProgressChanged += this.ProgressChanged; } // your UI binds to this command in order to kick off the work public ICommand InstigateWorkCommand { get { return this.instigateWorkCommand; } } public int CurrentProgress { get { return this.currentProgress; } private set { if (this.currentProgress != value) { this.currentProgress = value; this.OnPropertyChanged(() => this.CurrentProgress); } } } private void DoWork(object sender, DoWorkEventArgs e) { // do time-consuming work here, calling ReportProgress as and when you can } private void ProgressChanged(object sender, ProgressChangedEventArgs e) { this.CurrentProgress = e.ProgressPercentage; } } 

एक ProgressBar उपयोग ProgressBar नियंत्रण और इसके Value संपत्ति को ViewModel की एक संपत्ति के लिए बाध्य करें:

राय

 <ProgressBar Minimum="0" Maximum="0" Value="{Binding CurrentProgress}" /> 

ViewModel

 private double _currentProgress; public double CurrentProgress { get { return _currentProgress; } private set { _currentProgress = value; OnPropertyChanged("CurrentProgress"); } } 

अपने वीएम में दो गुण जोड़ें:

 bool IsProgressBarVisible double ProgressValue 

यदि आप अपने वीएम में लंबे समय से ऑपरेशन शुरू करते हैं, तो IsProgressBarVisible-property को सही पर सेट करें और वर्तमान प्रगति मूल्य के लिए प्रगति मूल्य नियतकालिक सेट करें। 0 और 100 के बीच मान की गणना करने का प्रयास करें। इसका लाभ यह है कि आपको न्यूनतम और अधिकतम मूल्य प्रदान करने की आवश्यकता नहीं है। एसिंक्रोनस ऑपरेशन पूरा होने के बाद, IsProgressBarVisible false को सेट करें।

एक्सएएमएल में, इन दोनों गुणों के लिए बाध्य करें बूलियन दृश्यता को दृश्यता में कनवर्ट करने के लिए एक मान कनवर्टर का उपयोग करें।

 <ProgressBar Value="{Binding ProgressValue}" Visibility="{Binding IsProgressBarVisible,Converter={StaticResource BooleanToVisibility_ValueConverter}}"/>