এমভিভিএম টেম্পলেট এর ভাল উদাহরণ


141

আমি বর্তমানে মাইক্রোসফ্ট এমভিভিএম টেম্পলেট নিয়ে কাজ করছি এবং বিশদ উদাহরণগুলির অভাব হতাশাবোধ করি। অন্তর্ভুক্ত কন্টাক্টবুক উদাহরণটি খুব কম কমান্ড হ্যান্ডলিং দেখায় এবং আমি খুঁজে পেয়েছি শুধুমাত্র অন্য উদাহরণটি একটি এমএসডিএন ম্যাগাজিন নিবন্ধ থেকে যেখানে ধারণাগুলি একই রকম তবে কিছুটা ভিন্ন পদ্ধতির ব্যবহার করে এবং এখনও কোনও জটিলতার অভাব রয়েছে। এমন কোনও শালীন এমভিভিএম উদাহরণ রয়েছে যা অন্তত সিআরইউডি বেসিক ক্রিয়াকলাপ এবং ডায়লগ / সামগ্রী স্যুইচিং দেখায়?


প্রত্যেকের পরামর্শগুলি সত্যই কার্যকর ছিল এবং আমি ভাল সংস্থানগুলির একটি তালিকা তৈরি করতে শুরু করব

ফ্রেমওয়ার্ক / টেমপ্লেট

দরকারী নিবন্ধ

Screencasts

অতিরিক্ত গ্রন্থাগারসমূহ


আমি আনন্দিত যে এই সংস্থানগুলি সাহায্য করেছে। আমি বর্তমানে আমার দ্বিতীয় প্রযোজনা এমভিভিএম অ্যাপ্লিকেশনটিতে আছি এবং এমন সামগ্রী যুক্ত করা চালিয়ে যাব যেগুলি আমার সামনে আসার সাথে সাথে শুরু হবে তাদের পক্ষে সহায়ক।
জাওয়ারেচ

উত্তর:


59

দুর্ভাগ্যক্রমে এমন কোনও দুর্দান্ত এমভিভিএম উদাহরণ অ্যাপ নেই যা সমস্ত কিছু করে এবং কিছু করার জন্য বিভিন্ন রকম পন্থা রয়েছে। প্রথমত, আপনি সেখানে অ্যাপ্লিকেশন ফ্রেমওয়ার্কগুলির সাথে পরিচিত হতে চান (প্রিজম একটি শালীন পছন্দ), কারণ তারা আপনাকে নির্ভরযোগ্য ইনজেকশন, কমান্ডিং, ইভেন্টের সমষ্টি ইত্যাদির মতো সুবিধাজনক সরঞ্জামগুলি সহজেই আপনার উপযুক্ত অনুসারে বিভিন্ন ধরণের চেষ্টা করে দেখতে সরবরাহ করে because ।

প্রিজম রিলিজ:
http://www.codeplex.com/CompositeWPF

এতে অনেকগুলি ছোট উদাহরণ এবং কীভাবে করা যায় তার সাথে একটি দুর্দান্ত শালীন উদাহরণ অ্যাপ (স্টক ব্যবসায়ী) অন্তর্ভুক্ত রয়েছে। খুব কমপক্ষে এটি বেশ কয়েকটি সাধারণ উপ-নিদর্শনগুলির একটি ভাল বুদ্ধি যা এমভিভিএমকে বাস্তবে কাজ করতে ব্যবহার করে। সিআরইউডি এবং ডায়ালগ উভয়ের জন্যই তাদের উদাহরণ রয়েছে, আমি বিশ্বাস করি।

প্রিজম অগত্যা প্রতিটি প্রকল্পের জন্য নয়, তবে এটির সাথে পরিচিত হওয়া ভাল।

CRUD: এই অংশটি বেশ সহজ, ডাব্লুপিএফ-এর দ্বিমুখী বাইন্ডিংগুলি বেশিরভাগ ডেটা সম্পাদনা করা সত্যই সহজ করে তুলেছে। আসল কৌশলটি এমন একটি মডেল সরবরাহ করা যা ইউআই সেটআপ করা সহজ করে। খুব কমপক্ষে আপনি এটি নিশ্চিত করতে চান যে আপনার ভিউমোডেল (বা ব্যবসায়িক অবজেক্ট) INotifyPropertyChangedবাঁধাই সমর্থন করার জন্য প্রয়োগ করে এবং আপনি সম্পত্তিগুলি সরাসরি ইউআই নিয়ন্ত্রণগুলিতে আবদ্ধ করতে পারেন, তবে আপনি IDataErrorInfoবৈধতার জন্যও প্রয়োগ করতে চাইতে পারেন । সাধারণত, আপনি যদি সিআরইউডি সেটআপ করার জন্য কোনও ধরণের ORM সমাধান ব্যবহার করেন তবে তা স্ন্যাপ।

এই নিবন্ধটি সাধারণ ক্রুড অপারেশনগুলি দেখায়: http://dotnetslackers.com/articles/wpf/WPFDataBindingWithLINQ.aspx

এটি লিনকটোসকিএল-এ নির্মিত হয়েছে, তবে এটি উদাহরণের সাথে অপ্রাসঙ্গিক - গুরুত্বপূর্ণ যেটি আপনার ব্যবসায়ের অবজেক্টগুলি বাস্তবায়ন করে INotifyPropertyChanged(লিনকটোসকিএল দ্বারা উত্পাদিত ক্লাসগুলি কী করে)। এমভিভিএম সেই উদাহরণটির মূল বিষয় নয়, তবে আমি মনে করি না যে এটি এই ক্ষেত্রে গুরুত্বপূর্ণ।

এই নিবন্ধটি ডেটা বৈধতা দেখায়
http://blogs.msdn.com/wpfsdk/archive/2007/10/02/data-uthoration-in-3-5.aspx

আবার, বেশিরভাগ ORM সমাধানগুলি ক্লাস তৈরি করে যা ইতিমধ্যে প্রয়োগ করে IDataErrorInfoএবং সাধারণত কাস্টম বৈধকরণের বিধিগুলি যুক্ত করা সহজ করার জন্য একটি প্রক্রিয়া সরবরাহ করে।

বেশিরভাগ সময় আপনি কোনও ওআরএম দ্বারা নির্মিত একটি বস্তু (মডেল) নিতে এবং এমন একটি ভিউমোডেলে মোড়ানো করতে পারেন যা এটি ধারণ করে এবং সংরক্ষণ / মোছার জন্য আদেশ দেয় - এবং আপনি ইউআইআই কে সরাসরি মডেলের বৈশিষ্ট্যে আবদ্ধ করতে প্রস্তুত।

ভিউটির মতো দেখতে কিছুটা (ভিউমোডেলের একটি সম্পত্তি Itemরয়েছে যা ওআরএম-তে তৈরি শ্রেণীর মতো মডেল ধারণ করে):

<StackPanel>
   <StackPanel DataContext=Item>
      <TextBox Text="{Binding FirstName, Mode=TwoWay, ValidatesOnDataErrors=True}" />
      <TextBox Text="{Binding LastName, Mode=TwoWay, ValidatesOnDataErrors=True}" />
   </StackPanel>
   <Button Command="{Binding SaveCommand}" />
   <Button Command="{Binding CancelCommand}" />
</StackPanel>

সংলাপ: ডায়ালগ এবং এমভিভিএম কিছুটা জটিল। আমি সংলাপগুলির সাথে মধ্যস্থতার পদ্ধতির স্বাদ ব্যবহার করতে পছন্দ করি, আপনি স্ট্যাকওভারফ্লো প্রশ্নটিতে এটি সম্পর্কে আরও কিছুটা পড়তে পারেন: ডাব্লুপিএফ
এমভিভিএম ডায়ালগ উদাহরণ

আমার স্বাভাবিক পদ্ধতির, যা বেশিরভাগ ক্লাসিক এমভিভিএম নয়, এর সংক্ষিপ্ত বিবরণ দেওয়া যেতে পারে:

ডায়লগের ভিউমোডেলের একটি বেস ক্লাস যা কমান্ড ও বাতিল ক্রিয়াকলাপের আদেশগুলি উন্মোচিত করে, এমন একটি ইভেন্ট দর্শকদের জানতে দেয় যে একটি ডায়ালগ বন্ধ হতে প্রস্তুত এবং আপনার সমস্ত সংলাপে আপনার যা কিছু প্রয়োজন হবে।

আপনার কথোপকথনের জন্য একটি জেনেরিক দৃশ্য - এটি উইন্ডো বা একটি কাস্টম "মডেল" ওভারলে টাইপ নিয়ন্ত্রণ হতে পারে। এর অন্তরে এটি একটি সামগ্রী উপস্থাপক যা আমরা ভিউমোডেলটিকে এতে intoুকিয়ে দিয়েছি এবং এটি উইন্ডোটি বন্ধ করার জন্য তারগুলি পরিচালনা করে - উদাহরণস্বরূপ ডেটা প্রসঙ্গে পরিবর্তন আপনি পরীক্ষা করতে পারেন যে নতুন ভিউমোডেলটি আপনার বেস বর্গ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছে, এবং যদি তা হয় তবে সম্পর্কিত ঘনিষ্ঠ ইভেন্টটি সাবস্ক্রাইব করুন (হ্যান্ডলারটি ডায়ালগের ফলাফল নির্ধারণ করবে)। যদি আপনি বিকল্প সার্বজনীন ঘনিষ্ঠ কার্যকারিতা সরবরাহ করেন (উদাহরণস্বরূপ এক্স বোতাম), আপনার ভিউমোডেলে প্রাসঙ্গিক ক্লোজ কমান্ডটি চালানোও নিশ্চিত করা উচিত।

আপনার ভিউমোডেলগুলির জন্য আপনাকে কোথাও ডেটা টেম্পলেট সরবরাহ করতে হবে, এগুলি খুব সহজ হতে পারে বিশেষত যেহেতু আপনার সম্ভবত পৃথক নিয়ন্ত্রণে থাকা প্রতিটি ডায়ালগের জন্য একটি ভিউ রয়েছে। ভিউমোডেলের জন্য ডিফল্ট ডেটা টেমপ্লেট এর পরে এর মতো কিছু দেখাবে:

<DataTemplate DataType="{x:Type vmodels:AddressEditViewModel}">
   <views:AddressEditView DataContext="{Binding}" />
</DataTemplate>

ডায়ালগ ভিউতে এগুলির অ্যাক্সেস থাকা দরকার, কারণ অন্যথায় এটি কীভাবে ভিউমডেলটি দেখানো হবে তা জানবে না, ভাগ করা ডায়ালগ ইউআই বাদে এর বিষয়বস্তুগুলি মূলত এটি:

<ContentControl Content="{Binding}" />

অন্তর্নিহিত ডেটা টেমপ্লেটটি মডেলটিতে দৃশ্যটি মানচিত্র করবে, তবে কে এটি চালু করবে?

এটি এমভিভিএম অংশ নয়। এটি করার একটি উপায় হ'ল একটি গ্লোবাল ইভেন্ট ব্যবহার করা। আমি যা করি তার থেকে ভাল কাজটি হ'ল নির্ভরতা ইনজেকশনের মাধ্যমে সরবরাহিত ইভেন্ট অগ্রিগেটর টাইপ সেটআপ ব্যবহার করা - এইভাবে ঘটনাটি পুরো অ্যাপ্লিকেশনটি নয়, একটি ধারক হিসাবে বিশ্বব্যাপী। প্রিজম ধারক শব্দার্থকতা এবং নির্ভরতা ইনজেকশনের জন্য unityক্য কাঠামো ব্যবহার করে এবং সামগ্রিকভাবে আমি ইউনিটিটিকে বেশ খানিকটা পছন্দ করি।

সাধারণত, মূল উইন্ডোটি এই ইভেন্টটির সদস্যতা নেওয়ার জন্য এটি অর্থবোধ করে - এটি ডায়ালগটি খুলতে পারে এবং ভিউমোডেলে এটির ডেটা প্রসঙ্গে সেট করতে পারে যা উত্থিত ইভেন্টের সাথে পাস হয়।

এই উপায়ে সেট আপ করুন ভিউমোডেলস অ্যাপ্লিকেশনটিকে একটি ডায়ালগ খোলার অনুরোধ জানাতে এবং সেখানে ইউআই সম্পর্কে কিছু না জেনে সেখানে ব্যবহারকারীর ক্রিয়াকে প্রতিক্রিয়া জানাতে যাতে বেশিরভাগ অংশের জন্য এমভিভিএম-নেস সম্পূর্ণ থাকে।

এমন অনেক সময় রয়েছে, যেখানে ইউআইকে ডায়লগগুলি বাড়িয়ে তুলতে হয় যা কিছুটা জটিল করে তোলে। উদাহরণস্বরূপ বিবেচনা করুন, যদি ডায়ালগের অবস্থানটি এটি খোলে যে বোতামটির অবস্থানের উপর নির্ভর করে। এই ক্ষেত্রে আপনার ডায়ালগ খোলার অনুরোধ করার সময় আপনার কিছু UI নির্দিষ্ট তথ্য থাকতে হবে। আমি সাধারণত একটি পৃথক শ্রেণি তৈরি করি যা একটি ভিউমোডেল এবং কিছু প্রাসঙ্গিক UI তথ্য ধারণ করে। দুর্ভাগ্যক্রমে কিছু সংযোগ সেখানে অপরিহার্য বলে মনে হচ্ছে।

একটি বোতাম হ্যান্ডলারের সিউডো কোড যা একটি ডায়ালগ উত্থাপন করে যা উপাদান অবস্থানের ডেটা প্রয়োজন:

ButtonClickHandler(sender, args){
    var vm = DataContext as ISomeDialogProvider; // check for null
    var ui_vm = new ViewModelContainer();
    // assign margin, width, or anything else that your custom dialog might require
    ...
    ui_vm.ViewModel = vm.SomeDialogViewModel; // or .GetSomeDialogViewModel()
    // raise the dialog show event
}

ডায়ালগ ভিউটি ডেটা অবস্থানের সাথে আবদ্ধ করবে এবং অন্তর্ভুক্ত থাকা ভিডমোডেলটি প্রেরণ করবে ContentControl। ভিউমোডেল নিজেই এখনও ইউআই সম্পর্কে কিছু জানে না।

সাধারণভাবে আমি পদ্ধতির DialogResultফেরতের সম্পত্তি ব্যবহার করি না ShowDialog()বা ডায়ালগটি বন্ধ না হওয়া পর্যন্ত থ্রেডটি ব্লক হওয়ার আশা করি না। একটি অ-মানক মডেল ডায়ালগ সর্বদা এর মতো কাজ করে না এবং একটি যৌগিক পরিবেশে আপনি প্রায়শই কোনও ইভেন্ট হ্যান্ডলারটি কোনওভাবেই এটির মতো ব্লক করতে চান না। আমি ভিউমোডেলগুলি এটির সাথে চুক্তি করতে পছন্দ করি - একটি ভিউমোডেলের স্রষ্টা তার সম্পর্কিত ইভেন্টগুলিতে সাবস্ক্রাইব করতে পারেন, প্রতিশ্রুতিবদ্ধ / বাতিল পদ্ধতিগুলি সেট করতে পারেন, তাই এই ইউআই পদ্ধতিতে নির্ভর করার দরকার নেই।

সুতরাং পরিবর্তে এই প্রবাহ:

// in code behind
var result = somedialog.ShowDialog();
if (result == ...

আমি ব্যবহার করি:

// in view model
var vm = new SomeDialogViewModel(); // child view model
vm.CommitAction = delegate { this.DoSomething(vm); } // what happens on commit 
vm.CancelAction = delegate { this.DoNothing(vm); } // what happens on cancel/close (optional)
// raise dialog request event on the container

আমি এটিকে এটিকে পছন্দ করি কারণ আমার বেশিরভাগ ডায়ালগগুলি সিউডো-মডেল নিয়ন্ত্রণগুলি অ-ব্লক করা এবং এটিকে এভাবে করা তার চারপাশে কাজ করার চেয়ে আরও সহজবোধ্য বলে মনে হয়। ইউনিট পরীক্ষার পাশাপাশি সহজ।


বিস্তারিত উত্তরের জন্য ধন্যবাদ! আমি সম্প্রতি সন্ধান করেছি যে আমার সবচেয়ে বড় সমস্যাটি যখন আমার যখন একটি মেইনভিউমোডেল অ্যাপ্লিকেশনটির প্রবাহ পরিচালনা করতে হয় তবে অন্যান্য ভিউ মডেলের সাথে যোগাযোগ করা দরকার। তবে এটি প্রদর্শিত হয় যে এমভিভিএম + মধ্যস্থতাকে জনপ্রিয় পন্থা বলে মনে হচ্ছে।
জওয়ারচেক

2
মধ্যস্থতাকারী স্পষ্টভাবে সহায়তা করে, কম সংযুক্তি যখন একটি লক্ষ্য হয় তখন ইভেন্টের সংস্থাগুলির প্যাটার্ন (প্রিজমের একটি ভাল প্রয়োগ রয়েছে) এছাড়াও সত্যই সহায়ক। এছাড়াও, আপনার প্রধান ভিউমডেলের সাধারণত নিজস্ব নিজস্ব ভিউ মডেলগুলি থাকে এবং তাদের সাথে যোগাযোগের ক্ষেত্রে সমস্যা হওয়া উচিত নয়। আপনার শিশু ভিডমোডালদের আপনার অ্যাপ্লিকেশনের অন্যান্য মডিউলগুলির সাথে ইন্টারঅ্যাক্ট করার দরকার হয় যখন তারা ইউআই সহ (আমার ডায়ালগ উদাহরণটি এই নির্দিষ্ট ক্ষেত্রে সম্পর্কে রয়েছে) জেনে রাখে না You
ডিম 22

1
কথোপকথন এবং উইন্ডোগুলির সাথে কাজ করার জন্য গাইডলাইনগুলি সত্যই সহায়ক হয়েছে। তবে আমি কয়েকটি বিষয় নিয়ে আটকে আছি: ১. আপনি কীভাবে উইন্ডোটির শিরোনামটি দর্শন থেকে সেট করবেন? ২. মালিকের উইন্ডোটি সেট করার সাথে আপনি কীভাবে আচরণ করবেন?
djskinner

@ ড্যানিয়েল স্কিনার: আমি ধরে নিচ্ছি যে আপনি এখানে সংলাপের বিষয়ে কথা বলছেন, আমি ভুল হলে আমাকে সংশোধন করুন। কথোপকথনের শিরোনামটি অন্য একটি সম্পত্তি এবং আপনি এটি যা পছন্দ করতে পারেন তা বেঁধে রাখতে পারেন। যদি আপনি একটি বেস ডায়লগ ভিউ মডেল ক্লাসের সাথে আমার পদ্ধতির অনুসরণ করেন (আসুন এটির শিরোনামের সম্পত্তি আছে তা ভেবে দেখুন), তবে আপনার সমস্ত জেনেরিক ডায়ালগ উইন্ডোতে আপনি UI থেকে UI বাইন্ডিংটি শিরোনামটিকে {বাইন্ডিং পাথ = ডেটা কনটেক্সট.তে নির্ধারণ করতে পারেন, এলিটনাম = NameOfContentPresenter}। মালিক উইন্ডোটি একটি সামান্য ট্র্যাকার - এর অর্থ হ'ল মধ্যস্থতাকারী যা ডায়ালগটি আসলে পপ আপ করে তার মূল অ্যাপ্লিকেশন ভিউ সম্পর্কে জানতে হবে।
ডিমের

প্রকৃতপক্ষে আমি এটি ফিরিয়ে নিয়েছি - আপনি যে কোনও সময়ে এটি কীভাবে গঠন করেন তা নির্বিশেষে যে কেউ ডায়ালগটি আসলে পপ করছে তার মূল অ্যাপ উইন্ডো / ভিউয়ের একটি রেফারেন্স থাকা দরকার। আমি কোথায় বলেছি তা লক্ষ্য করুন "সাধারণত, মূল উইন্ডোটি এই ইভেন্টটির সদস্যতা নেওয়ার জন্য এটি বোধ করে - এটি ডায়ালগটি খুলতে পারে এবং ভিউমোডলে তার ডেটা প্রসঙ্গ সেট করতে পারে যা উত্থাপিত ইভেন্টের সাথে পাস হয়।" আপনি এখানে মালিককে সেট করবেন।
ডিম

6

জেসন ডলিংগার এমভিভিএমের একটি দুর্দান্ত স্ক্রিনকাস্ট তৈরি করেছেন । এগার যেমন উল্লেখ করেছেন তেমন কোনও ভাল উদাহরণ নেই। তারা সব শেষ। বেশিরভাগই ভাল এমভিভিএম উদাহরণ, তবে আপনি যখন জটিল সমস্যার মধ্যে পড়ে যান না not প্রত্যেকেরই নিজস্ব উপায় আছে। লরেন্ট বুগনিওনের ভিউ মডেলগুলির মধ্যে যোগাযোগের জন্য একটি ভাল উপায় রয়েছে। http://blog.galasoft.ch/archive/2009/09/27/mvvm-light-toolkit-mes यात्रा-v2-beta.aspx সিনচ একটি ভাল উদাহরণ। পল স্টোভেলের একটি ভাল পোস্ট রয়েছে যা তার ম্যাগেলান কাঠামোর সাথে অনেক কিছু ব্যাখ্যা করে।


3

আপনি কি ক্যালিবার্নের দিকে চেয়েছেন ? কন্ট্যাক্টম্যানেজারের নমুনায় এতে অনেক ভাল জিনিস রয়েছে। জেনেরিক ডাব্লুপিএফ নমুনাগুলি কমান্ডগুলির একটি ভাল ওভারভিউ সরবরাহ করে। ডকুমেন্টেশন মোটামুটি ভাল এবং ফোরামগুলি সক্রিয় আছে। বাঞ্ছনীয়!



3

এখানে আমি একটি ডাব্লুপিএফ (ইনভেন্টরি ম্যানেজমেন্ট অ্যাপ্লিকেশন) অ্যাপ্লিকেশনটির লিঙ্ক যুক্ত করছি যা আমার নকশা করা এমভিভিএম আর্কিটেকচার ব্যবহার করে ।

এটির ইউআই দুর্দান্ত। https://github.com/shivam01990/InventoryManagement


2

সিনচ কাঠামোর নমুনা প্রকল্পটি বেসিক সিআরইউডি এবং নেভিগেশন সরঞ্জামগুলি দেখায়। এটি এমভিভিএম ব্যবহারের মোটামুটি ভাল উদাহরণ এবং এর ব্যবহার এবং অনুপ্রেরণাগুলি ব্যাখ্যা করার জন্য একটি বহু-অংশ নিবন্ধ অন্তর্ভুক্ত ।


2

আপনার হতাশায় আমিও ভাগ করে নিয়েছি। আমি একটি আবেদন লিখছি এবং আমার এই 3 প্রয়োজনীয়তা ছিল:

  • প্রসার্য
  • এমভিভিএম সহ ডাব্লুপিএফ
  • জিপিএল সামঞ্জস্যপূর্ণ উদাহরণ

আমি যেগুলি পেয়েছি সেগুলি বিট এবং টুকরা ছিল, তাই আমি কেবল এটির পক্ষে সবচেয়ে ভাল লেখা শুরু করলাম। আমি এটি কিছুটা gotোকার পরে, আমি বুঝতে পারলাম এমন অন্যান্য ব্যক্তিরাও থাকতে পারেন (নিজের মতো) যারা একটি রেফারেন্স অ্যাপ্লিকেশন ব্যবহার করতে পারেন, তাই আমি জেনেরিক জিনিসগুলি একটি ডাব্লুপিএফ / এমভিভিএম অ্যাপ্লিকেশন কাঠামোর মধ্যে ফেলেছিলাম এবং এটি এলজিপিএলের অধীনে প্রকাশ করেছি। আমি এর নাম রেখেছি সোপবক্স কোর । আপনি যদি ডাউনলোডের পৃষ্ঠায় যান, আপনি দেখতে পাবেন এটি একটি ছোট ডেমো অ্যাপ্লিকেশন নিয়ে আসে এবং সেই ডেমো অ্যাপ্লিকেশনটির উত্স কোডও ডাউনলোডের জন্য উপলব্ধ। আশা করি আপনি এটি সহায়ক বলে মনে করেন। এছাড়াও, আপনি আরও তথ্য চাইলে আমাকে স্কট-এ} soapboxautomation.com এ ইমেল করুন।

সম্পাদনা : এটি কীভাবে কাজ করে তা ব্যাখ্যা করে একটি কোডপ্রজেক্ট নিবন্ধও পোস্ট করেছে।


2

কোড প্রকল্পের স্ক্র্যাচ থেকে আমি একটি সাধারণ এমভিভিএম উদাহরণ লিখেছি এখানে লিঙ্কটি এমভিভিএম ডাব্লুপিএফ ধাপে ধাপে রয়েছে । এটি একটি সাধারণ 3 স্তর আর্কিটেকচার থেকে শুরু হয় এবং PRISM এর মতো কিছু কাঠামো ব্যবহার করতে আপনাকে স্নাতক করে তোলে।

এখানে চিত্র বর্ণনা লিখুন


1

এমনকি আমি বিষয়টি হস্তান্তর না করা পর্যন্ত হতাশাটি ভাগ করে নিয়েছি। আমি ইনসিডিটার শুরু করেছি।

ইনসিডিটার ( http://inceditor.codeplex.com ) এমন একটি সম্পাদক যা বিকাশকারীদের ডাব্লুপিএফ, এমভিভিএম এবং এমইএফ এর সাথে পরিচয় করানোর চেষ্টা করে। আমি এটি শুরু করেছি এবং 'থিম' সমর্থন মত কিছু কার্যকারিতা পেতে পরিচালিত। আমি ডাব্লুপিএফ বা এমভিভিএম বা এমইএফ-তে কোনও বিশেষজ্ঞ নই তাই আমি এতে প্রচুর কার্যকারিতা রাখতে পারি না। এটিকে আরও ভাল করার জন্য আমি আপনাদের কাছে আন্তরিক অনুরোধ করছি যাতে আমার মতো বাদামীরা আরও ভাল করে বুঝতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.