উইন্ডো বনাম পৃষ্ঠা বনাম ডাব্লুপিএফ নেভিগেশনের জন্য ব্যবহারকারীর নিয়ন্ত্রণ?


192

আমি বর্তমানে একটি ডেস্কটপ অ্যাপ্লিকেশন লিখছি, তবে অ্যাপ্লিকেশনটির নতুন বিভাগে কাউকে পুনর্নির্দেশের সময় আমি কী ব্যবহার করব তা আমার মাথা পেতে পারে বলে মনে হচ্ছে না।

আমার বিকল্পগুলি প্রদর্শিত হবে

  • জানলা
  • পৃষ্ঠা
  • UserControl

তবে আমি বুঝতে পারছি না যে তাদের মধ্যে পার্থক্য কী এবং আমি যখন প্রত্যেকটি ব্যবহার করব।

কেউ কি আমার জন্য পার্থক্যগুলি ব্যাখ্যা করতে পারে এবং আপনি কী পরিস্থিতিতে / অ্যাপ্লিকেশনগুলির জন্য প্রত্যেকে ব্যবহার করতে পারেন তার একটি উদাহরণ দিতে পারে?

উত্তর:


337

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

একটি পৃষ্ঠাগুলি আপনার উইন্ডোর ভিতরে একটি পৃষ্ঠা। এটি বেশিরভাগ ওয়েব-ভিত্তিক সিস্টেমগুলির জন্য এক্সবিএপি এর মতো ব্যবহৃত হয়, যেখানে আপনার একক ব্রাউজার উইন্ডো রয়েছে এবং সেই উইন্ডোতে বিভিন্ন পৃষ্ঠা হোস্ট করা যেতে পারে। এছাড়া ব্যবহার করা যেতে পারে ন্যাভিগেশন অ্যাপ্লিকেশন মত sellmeadog বলেন

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

উইন্ডোগুলির মধ্যে নেভিগেট করার সময়, আপনি কেবল একটি নতুন Windowঅবজেক্ট তৈরি করতে এবং এটি প্রদর্শন করতে পারেন

var NewWindow = new MyWindow();
newWindow.Show();

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

আমার নেভিগেশনের পছন্দের পদ্ধতিটি হ'ল একটি ব্যবহার করে কিছু গতিশীল বিষয়বস্তু অঞ্চল তৈরি করা ContentControlএবং UserControlবর্তমান দৃশ্যের যা কিছু আছে তা সমেত এটি তৈরি করা।

<Window x:Class="MyNamespace.MainWindow" ...>
    <DockPanel>
        <ContentControl x:Name="ContentArea" />
    </DockPanel>
</Window>

এবং আপনার নেভিগেট ইভেন্টে আপনি কেবল এটি ব্যবহার করে সেট করতে পারেন

ContentArea.Content = new MyUserControl();

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

<Window x:Class="SimpleMVVMExample.ApplicationView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:SimpleMVVMExample"
        Title="Simple MVVM Example" Height="350" Width="525">

   <Window.Resources>
      <DataTemplate DataType="{x:Type local:HomeViewModel}">
         <local:HomeView /> <!-- This is a UserControl -->
      </DataTemplate>
      <DataTemplate DataType="{x:Type local:ProductsViewModel}">
         <local:ProductsView /> <!-- This is a UserControl -->
      </DataTemplate>
   </Window.Resources>

   <DockPanel>
      <!-- Navigation Buttons -->
      <Border DockPanel.Dock="Left" BorderBrush="Black"
                                    BorderThickness="0,0,1,0">
         <ItemsControl ItemsSource="{Binding PageViewModels}">
            <ItemsControl.ItemTemplate>
               <DataTemplate>
                  <Button Content="{Binding Name}"
                          Command="{Binding DataContext.ChangePageCommand,
                             RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
                          CommandParameter="{Binding }"
                          Margin="2,5"/>
               </DataTemplate>
            </ItemsControl.ItemTemplate>
         </ItemsControl>
      </Border>

      <!-- Content Area -->
      <ContentControl Content="{Binding CurrentPageViewModel}" />
   </DockPanel>
</Window>

Screenshot1 Screenshot2


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

2
@ হেরোজেরো যদি আমি এমভিভিএম ব্যবহার করে একটি অডিট ফর্ম তৈরি করতে চাইতাম তবে আমার কাছে ফর্মটির জন্য AuditViewModelসমস্ত ডেটা এবং কার্যকারিতা রয়েছে এবং আমি এটি AuditViewইউজারকন্ট্রোল বা একটি মাত্র ব্যবহার করে আঁকতামDataTemplate
রাচেল

1
ধন্যবাদ! প্রকৃতপক্ষে আপনার ব্লগ এবং কয়েকটি অন্যান্য সাইটগুলিতে যাওয়ার পরে, এমভিভিএম কীভাবে কাজ করে তা সম্পর্কে আমার আরও ভাল ধারণা রয়েছে।
হেরোজারো

1
@Herrozerro দ্য ViewModelসাধারণত জন্য নির্মিত হয় View, যখন Modelsতথ্য বস্তু এবং ক্লাস ( "বিল্ডিং ব্লক") আপনার অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হয় ( ViewModels)
রেচেল

1
@ জিটিএস 13 হ্যাঁ আমি ঘন ঘন এটি করি। আমি TabControl.ItemsSourceঅবজেক্টের সংকলনে বাঁধাই করি এবং ডাব্লুপিএফকে কীভাবে প্রতিটি ট্যাবে প্রতিটি বস্তুর প্রকার আঁকতে হয় তা জানানোর জন্য ডেটা টেম্পলেটগুলি ব্যবহার করি। সাধারণত ভালো কিছু এই
রেচেল

13
  • উইন্ডোটি এর মতো Windows.Forms.Form, তাই কেবল একটি নতুন উইন্ডো
  • অনলাইন ডকুমেন্টেশন অনুসারে পৃষ্ঠাটি হ'ল :

    উইন্ডোজ ইন্টারনেট এক্সপ্লোরার, নেভিগেশন উইন্ডো এবং ফ্রেমে নেভিগেট এবং হোস্ট করা যেতে পারে এমন সামগ্রীর একটি পৃষ্ঠা আবদ্ধ করে।

    আপনি কিছু এইচটিএমএল বিষয়বস্তু ভিজ্যুয়ালাইজ করতে গিয়ে আপনি মূলত এটি ব্যবহার করুন

  • ইউজারকন্ট্রোলটি এমন ক্ষেত্রে হয় যখন আপনি একাধিক পৃথকভাবে ব্যবহার করতে কিছু পুনরায় ব্যবহারযোগ্য উপাদান (তবে একক নয়) তৈরি করতে চানWindows


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

@ স্টিভ: UserControlআপনি যদি মনে করেন যে এই উইন্ডোতে আপনি একই নিয়ন্ত্রণের ব্যবহার করতে চান তবে আপনি অন্য কোনওটিকে ব্যবহার করবেন, সুতরাং ডাবল কোড লেখার পরিবর্তে কেবল একটি তৈরি করুন UserControl, তবে তা না হলে কেবল ভিজ্যুয়ালাইজেশনের জন্য নিয়ন্ত্রণ রাখুন Windowআপনি যে বোতামগুলি বলেছেন সেগুলি থেকে ডানদিকে নিজেই আপনার ডেটা ।
টিগ্রান

6
আরও একটি আইটেম আমার মনে হয় যোগ করা উচিত: DataTemplates। আপনি যখন ডাব্লুপিএফকে নির্দিষ্ট ক্ষেত্রের মধ্যে কোনও আইটেম আঁকতে চান তা বলতে চাইলে এগুলি ব্যবহৃত হয়। উদাহরণস্বরূপ, আপনি যদি Buttonsবৃত্তাকার বৃত্ত হতে আপনার আঁকতে চান তবে আপনি কেবল একটি এর DataTemplateপরিবর্তে একটি ব্যবহার করতে পারেন UserControl। আমি সাধারণত UserControlsযখন আমি নিজস্ব কার্যকারিতা সহ একটি নতুন নিয়ন্ত্রণ চাই বা আমি যখন একটি একক উপাদান যেমন একটি এর জন্য অনেক এক্সএএমএল চাই তখন ব্যবহার করি View। এক্সএএমএল এর ছোট বিটগুলির জন্য যে কোনও বিশেষ কার্যকারিতা প্রয়োজন হয় না, আপনার DataTemplateতৈরির পরিবর্তে একটি ব্যবহার করা উচিতUserControl
রাচেল

3
সাধারণভাবে ক এর বিষয়বস্তু PageHTML নয় XAML। যাইহোক, একটি Pageনেভিগেশন ফ্রেমওয়ার্কে আবদ্ধ হয় যা কোনও ওয়েব ব্রাউজারে নেভিগেশন কীভাবে করা হয় তার মত ধারণার অনুরূপ। (এবং অ্যাপ্লিকেশনটি যদি এক্সবিএপি অ্যাপ্লিকেশন হয় তবে পৃষ্ঠাগুলি একটি ব্রাউজারে হোস্ট করা যাবে))
মার্টিন লিভারেজ

6

আপনি যে অ্যাপ্লিকেশনটি তৈরি করতে চাইছেন তার উপর সমস্ত নির্ভর করে। Windowআপনি যদি কোনও ডায়ালগ ভিত্তিক অ্যাপ তৈরি করে থাকেন তবে তা ব্যবহার করুন। Pageআপনি যদি নেভিগেশন ভিত্তিক অ্যাপ্লিকেশন তৈরি করে থাকেন তবে এস ব্যবহার করুনUserControlআপনি যে দিকনির্দেশে চলেছেন তা বিবেচনা না করেই কার্যকর হবে আপনি উইন্ডোজ এবং পৃষ্ঠাগুলি উভয় ক্ষেত্রেই সেগুলি ব্যবহার করতে পারেন।

অন্বেষণ শুরু করার জন্য একটি ভাল জায়গা এখানে: http://windowsclient.net/learn


5

আমরা সাধারণত Windowঅ্যাপ্লিকেশনের জন্য ওয়ান মেইন ব্যবহার করি এবং অন্যান্য উইন্ডোজগুলি যখন আপনার পপআপগুলির প্রয়োজন হয় তখন এমন পরিস্থিতিতে ব্যবহার করা যেতে পারে কারণ এক্সএএমএল-তে পপআপ নিয়ন্ত্রণগুলি ব্যবহার করার পরিবর্তে যা দৃশ্যমান নয় আমরা নকশার সময় দৃশ্যমান একটি উইন্ডো ব্যবহার করতে পারি যাতে সহজ হবে সাথে কাজ করা

অন্যদিকে আমরা নেভিগেট করতে কয়টি পেজ এক স্ক্রীন থেকে ব্যবহারকারী পরিচালনার পর্দা মত অন্য অর্ডার স্ক্রিন ইত্যাদি প্রধান উইন্ডোতে ব্যবহারের আমরা ব্যবহার করতে পারি FrameXAML নিচের মত নেভিগেশনের জন্য নিয়ন্ত্রণ

    <Frame Name="mainWinFrame" NavigationUIVisibility="Hidden"  ButtonBase.Click="mainWinFrame_Click">
    </Frame>

সি শার্প

     private void mainWinFrame_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            if (e.OriginalSource is Button)
            {
                Button btn = (Button)e.OriginalSource;

                if ((btn.CommandParameter != null) && (btn.CommandParameter.Equals("Order")))
                {

                    mainWinFrame.Navigate(OrderPage);
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error");
        }
    }

এটি করার একটি উপায় এটি আমরা ফ্রেমের পরিবর্তে একটি ট্যাব কন্ট্রোলও ব্যবহার করতে পারি এবং নতুন পৃষ্ঠা যুক্ত করার সময় এটিতে একটি অভিধান ব্যবহার করে পৃষ্ঠাগুলি যুক্ত করতে পারি যদি নিয়ন্ত্রণটি ইতিমধ্যে বিদ্যমান থাকে তবে কেবল নেভিগেট করুন অন্যথায় অ্যাড এবং নেভিগেট করুন। আমি আশা করি যে কাউকে সাহায্য করবে


2

বেশিরভাগই সঠিক উত্তর পোস্ট করেছেন। আমি কয়েকটি লিঙ্ক যুক্ত করতে চাই, যাতে আপনি সেগুলি উল্লেখ করতে পারেন এবং সে সম্পর্কে স্পষ্ট এবং আরও ভাল ধারণা পেতে পারেন:

ইউজারকন্ট্রোল: http://msdn.microsoft.com/en-IN/library/a6h7e207(v=vs.71).aspx

ডাব্লুপিএফ সম্পর্কিত পৃষ্ঠা এবং উইন্ডোর মধ্যে পার্থক্য: ডাব্লুপিএফ মধ্যে পৃষ্ঠা বনাম উইন্ডো?

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