ডাব্লুপিএফ-এ ডামি ডিজাইন-সময় ডেটার জন্য কোন পন্থা উপলব্ধ?


97

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

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

সত্যই আমি যা চাই তা হ'ল এক্স জনএল, "পল", "জর্জ" এবং "রিঙ্গো" এক্সএএমএল ডিজাইনারে আমার স্টাইলযোগ্য আইটেম হিসাবে প্রদর্শিত হবে ItemsControl, তবে অ্যাপ্লিকেশনটি আসল তথ্য প্রদর্শিত হবে রান।

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

সুতরাং আমার প্রশ্নগুলি হ'ল:

1. আমি কীভাবে ভিজ্যুয়াল স্টুডিও এক্সএএমএল ডিজাইনারের সংগ্রহ এবং অ-তুচ্ছ তথ্যগুলির ডিজাইন-টাইম বাইন্ডিংগুলি উপার্জন করতে পারি এবং তারপরে রানটাইম বাইন্ডিংগুলিকে স্বচ্ছভাবে বদলাতে পারি?

২. অন্যরা কীভাবে এই ডিজাইন-সময় বনাম রানটাইম ডেটা সমস্যা সমাধান করেছে? আমার ক্ষেত্রে, আমি খুব সহজেই উভয়ের জন্য একই ডেটা ব্যবহার করতে পারি না (যেমন কেউ একটি ডেটাবেস কোয়েরি করতে সক্ষম হবেন)।

৩. তাদের এক্সপ্রেশন মিশ্রণের বিকল্পগুলি কি আমি ডেটা-ইন্টিগ্রেটেড এক্সএএমএল ডিজাইনের জন্য ব্যবহার করতে পারি? (আমি জানি কিছু বিকল্প রয়েছে তবে আমি বিশেষত এমন কিছু চাই যা আমি ব্যবহার করতে পারি এবং আবদ্ধ নমুনা ডেটা ইত্যাদি দেখতে পারি?)

উত্তর:


120

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

  • নেমস্পেসের ঘোষণাটি যুক্ত করা হচ্ছে

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    
  • উইন্ডো / নিয়ন্ত্রণ সংস্থাগুলিতে মক ডেটা প্রসঙ্গে যুক্ত করা

    <UserControl.Resources>
      <ViewModels:MockXViewModel x:Key="DesignViewModel"/>
    </UserControl.Resources>
    
  • নকশা-সময় ডেটা প্রসঙ্গে সেট করা

    <Grid d:DataContext="{Binding Source={StaticResource DesignViewModel}}" ...
    

যথেষ্ট ভাল কাজ করে।


4
আপনি ব্যবহার করতে কোনো সমস্যা হয় d:DataContext: যদি আপনি এই প্রশ্নে কিছু সাহায্য পেতে পারেন stackoverflow.com/questions/8303803/...
মার্টিন Liversage

27
এই উদাহরণটি কি মকএক্সভিউমোডেলের কোনও উদাহরণটি কোনও রিলিজ বিল্ডের জন্য আপনার সংস্থানগুলিতে লোড করার কারণ হবে না? এটা কি উদ্বেগ নয়?
jpierson

12
এফওয়াইআই: আপনারও নিম্নলিখিতগুলির দরকার হয়, বা ভিএস ২০১২ সংকলকটি xaml ফাইলটি সংকলন করবে না: xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"এবংmc:Ignorable="d"
এডওয়ার্ডস

51
jpierson ঠিক আছে। আমি ব্যবহার করতে পছন্দ <Grid d:DataContext="{d:DesignInstance Type=ViewModels:MockXViewModel, IsDesignTimeCreatable=True}" ...। এইভাবে, উপহাসযুক্ত ভিউ মডেলটি কেবল ডিজাইনারে তৈরি করা হবে, আপনার অ্যাপ্লিকেশনটি চালানোর সময় নয়। মনে রাখবেন, এই পদ্ধতির জন্য আপনার মক ভিউ মডেলের একটি প্যারামিটারলেস কনস্ট্রাক্টর থাকতে হবে। কিন্তু উত্তরের উপরে বর্ণিত উদাহরণে একই ঘটনা।
রেনি

4
@ রেনé আপনার পন্থা আরও ভাল। দয়া করে এটি একটি উত্তর হিসাবে যুক্ত করুন এবং আমি এটির জন্য ভোট দেব
dss539

15

গোরানের গৃহীত উত্তর এবং রেনির দুর্দান্ত মন্তব্যটির সংমিশ্রণ হিসাবে।

  • নাম স্থান ঘোষণা করুন। xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

  • কোড থেকে আপনার ডিজাইনের সময় ডেটা প্রসঙ্গে উল্লেখ করুন।
    <Grid d:DataContext="{d:DesignInstance Type=ViewModels:MockXViewModel, IsDesignTimeCreatable=True}" ...


4
আমি এটিকে নতুন উত্তর হিসাবে চিহ্নিত করতে প্রলুব্ধ হই, তবে সম্ভবত আমরা বিশদটি বিশদটি টানতে পারি।
el2iot2

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

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

@ পল এটি সত্যই পছন্দ করার বিষয়, তবে এই উত্তরটি পুরো নকশার সময়কালীন তথ্য প্রসঙ্গে একটি ঘোষণায় রাখে এবং এটি দুটি দাগে রাখে। পরিবর্তনগুলি সহজ করে তোলে
জন স্ট্রিটেনবার্গার

4
@ জন স্ট্রিটেনবার্গার এটি কেবল পছন্দ নয়, গৃহীত উত্তর অযথা সম্পদ স্মৃতিতে কেবল ডিজাইনারের জন্য লোড করে না।
ইউইউডিডিএলআরলিআরএস

4

কার্ল শিফলেট একটি দৃষ্টিভঙ্গির বর্ণনা দিয়েছেন যা ভিএস ২০০৮ এবং ভিএস ২০১০ এর জন্য সমানভাবে ভালভাবে কাজ করা উচিত:

ডাব্লুপিএফ এবং সিলভারলাইট প্রকল্পগুলিতে ভিজ্যুয়াল স্টুডিও ২০০৮ সাইডার ডিজাইনার ডিজাইনের সময় ডেটা দেখছেন

লরেন্ট বুগনিওনের একইরকম দৃষ্টিভঙ্গি যা এক্সপ্রেশন ব্লেন্ডকে কেন্দ্র করে। এটি VS2010 এর জন্য কাজ করতে পারে তবে আমি এখনও এটি নিশ্চিত করে নি।

মাইক্রোসফ্ট এক্সপ্রেশন ব্লেন্ডে ডিজাইন মোডে ডেটা সিমুলেটিং


এটা আমার নজরে আনার জন্য ধন্যবাদ. আমি DesignAndRunTimeDataContext ধারণাটি পছন্দ করি।
el2iot2

4
কার্ল শিফলেটটির ভিজ্যুয়াল স্টুডিও ২০১০ এর জন্য একটি আপডেট করা নিবন্ধ রয়েছে:
ডাব্লুপিএফ

4
লিঙ্কের সামগ্রীর সংক্ষিপ্তসারটি উত্তরে সম্পাদনা করা উচিত, বিশেষত যেহেতু প্রথম লিঙ্কটি এখন মারা গেছে।
লরাডাককি

4

ভিজ্যুয়াল স্টুডিও 2010 এবং এক্সপ্রেশন মিশ্রণ 4 এর নতুন ডিজাইন-সময়ের বৈশিষ্ট্যগুলি আপনার জন্য একটি বিকল্প।

এটি কীভাবে কাজ করে তা ডাব্লুপিএফ অ্যাপ্লিকেশন ফ্রেমওয়ার্ক (ডাব্লুএফ) এর বুকলিবারি নমুনা অ্যাপ্লিকেশনটিতে দেখানো হয়েছে । দয়া করে .NET4 সংস্করণটি ডাউনলোড করুন।


লিঙ্কের জন্য ধন্যবাদ। একটি নির্দিষ্ট কোড ফাইল আছে বা নির্মাণ করা উচিত যে আমার দৃষ্টিভঙ্গিটি দেখার জন্য তাকানো উচিত? (একটি সংক্ষিপ্ত ওভারভিউ দুর্দান্ত হবে)
el2iot2

বুকলিবারি.প্রেমেশনেশন প্রকল্পটি দেখুন। এই প্রকল্পে আপনি "ডিজাইনডাটা" ফোল্ডারটি পেয়েছেন যা ইউজারকন্ট্রোলগুলি "দর্শন" ফোল্ডারে ব্যবহার করে।
jbe

4
+1 স্রেফ এই দেখুন। যে কেউ আগ্রহী তাদের জন্য নমুনা ডেটা ভিউ মডেলটি এক্সএএমএল-তে ঘোষণা করা হয় এবং এটির মাধ্যমে ডি: ডেটা কনটেক্সট = "{ডি: ডিজাইনডাটা উত্স = .. / ডিজাইনডাটা / নমুনা ল্যান্ডটোভুডমোডেল.এক্সামেল}"
রিচার্ডড

4

আমি .NET 4.5 এবং ভিজ্যুয়াল স্টুডিও 2013 এর সাথে ডিজাইন সময় ডেটা তৈরি করার জন্য এই পদ্ধতির ব্যবহার করি।

আমার কাছে কেবল একটি ভিউমোডেল রয়েছে। ভিউ মডেলটির একটি সম্পত্তি রয়েছে IsInDesignModeযা ডিজাইন মোড সক্রিয় কিনা বা ক্লাস দেখুন ViewModelBase) তা জানায় । তারপরে আপনি ভিউ মডেল কনস্ট্রাক্টারে আপনার ডিজাইনের সময় ডেটা (কোনও আইটেম নিয়ন্ত্রণ পূরণের মতো) সেট আপ করতে পারেন।

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

public abstract class ViewModelBase
{
    public bool IsInDesignMode
    {
        get
        {
            return DesignerProperties.GetIsInDesignMode(new DependencyObject());
        }
    }
}

public class ExampleViewModel : ViewModelBase
{
    public ExampleViewModel()
    {
        if (IsInDesignMode == true)
        {
            LoadDesignTimeData();
        }
    }

    private void LoadDesignTimeData()
    {
        // Load design time data here
    }       
}

4

ভিজ্যুয়াল স্টুডিও 2017 ব্যবহার করে আমি এই জাতীয় গাইড এবং প্রশ্নগুলির সমস্ত অনুসরণ করার চেষ্টা করছি এবং আমি এখনও এমন একটি মুখোমুখি <ItemsControl>হয়েছি DesignFooViewModelযেটি উত্তরাধিকারসূত্রে প্রাপ্ত একটির কনস্ট্রাক্টরের ভিতরে থাকা আমার কোডটি কার্যকর করে নি FooViewModel। আমি নিশ্চিত করেছিলাম যে এই "হ্যান্ডি" এমএসডিএন গাইড (স্পোয়েলার:MessageBox ডিবাগিং) । যদিও এটি সরাসরি মূল প্রশ্নের সাথে সম্পর্কিত নয় তবে আমি আশা করি এটি অন্যদের অনেক সময় সাশ্রয় করবে।

দেখা যাচ্ছে আমি কোনও ভুল করছি না। সমস্যাটি ছিল আমার x x 64 এর জন্য অ্যাপ্লিকেশনটি তৈরি করা দরকার। যেহেতু ভিজ্যুয়াল স্টুডিওটি এখনও 2018-এ রয়েছে 32-বিট প্রক্রিয়া এবং দৃশ্যত ডিজাইনার অংশের জন্য 64-বিট হোস্ট প্রক্রিয়াটি স্পিন করতে পারে না এটি আমার x 64 ক্লাস ব্যবহার করতে পারে না। সত্যিই খারাপ জিনিসটি আমি ভাবতে পারি যে কোনও লগতে কোনও ত্রুটি খুঁজে পাওয়া যায় না।

সুতরাং আপনি যদি এই প্রশ্নটিতে হোঁচট খাচ্ছেন কারণ আপনি আপনার ডিজাইনের সময় দেখার মডেলটির সাথে বগাস ডেটা দেখছেন (উদাহরণস্বরূপ: আপনি সম্পত্তিটি নির্ধারণ করেন তা <TextBlock Text="{Binding Name}"/>দেখায় Nameনা) কারণটি আপনার x64 বিল্ড হওয়ার সম্ভাবনা রয়েছে। নির্ভরতার কারণে যদি আপনি আপনার বিল্ড কনফিগারেশনটিকে কোনওcpu বা x86 এ পরিবর্তন করতে অক্ষম হন তবে একটি নতুন প্রকল্প তৈরি করার বিষয়টি বিবেচনা করুন যা পুরোপুরি anycpu এবং এর নির্ভরতা (বা কোনও নির্ভরতা) নেই। সুতরাং আপনি আপনার "ডাব্লুপিএফ অ্যাপ" প্রকল্পটি থেকে "সি # শ্রেণির পাঠাগার" প্রকল্পে কোডের আরম্ভের অংশগুলি বাদ দিয়ে বেশিরভাগ বা সমস্ত বিভাজন শেষ করেছেন।

কোডবেসের জন্য আমি কাজ করছি বলে আমি মনে করি এটি কিছু কোডের নকলের মূল্যে উদ্বেগের স্বাস্থ্যকর পৃথকীকরণকে বাধ্য করবে যা সম্ভবত নেট পজিটিভ জিনিস thing


3

শীর্ষ রেট করা উত্তরের মতো, তবে আমার মতে আরও ভাল: আপনি ডিজাইনের ডেটার উদাহরণ ফেরত দিতে একটি স্ট্যাটিক সম্পত্তি তৈরি করতে পারেন এবং এটি সরাসরি এক্সএএমএল থেকে রেফারেন্স করতে পারেন:

<d:UserControl.DataContext>
    <Binding Source="{x:Static designTimeNamespace:DesignTimeViewModels.MyViewModel}" />
</d:UserControl.DataContext>

এটি ব্যবহারের প্রয়োজন এড়িয়ে চলে UserControl.Resources। আপনার স্থিতিশীল সম্পত্তিটি আপনাকে একটি তুচ্ছ ডেটা ধরণের নির্মাণের অনুমতি দেয় এমন কারখানা হিসাবে কাজ করতে পারে - উদাহরণস্বরূপ যদি আপনার ডিফল্ট কর্টার না থাকে তবে আপনি উপযুক্ত কারখানায় ইনজেকশন দেওয়ার জন্য একটি কারখানা বা ধারককে এখানে কল করতে পারেন।

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