ডাব্লুপিএফ এক্সএএমএল বাইন্ডিংয়ের সাথে একটি স্ট্রিং যুক্ত করতে স্ট্রিংফর্ম্যাট ব্যবহার করুন


124

আমার কাছে একটি ডাব্লুপিএফ 4 অ্যাপ্লিকেশন রয়েছে যাতে একটি টেক্সটলক রয়েছে যা একটি পূর্ণমাত্রার মানের সাথে একমুখী আবদ্ধ থাকে (এই ক্ষেত্রে, ডিগ্রি সেলসিয়াস তাপমাত্রা)। এক্সএএমএল এর মত দেখাচ্ছে:

<TextBlock x:Name="textBlockTemperature">
        <Run Text="{Binding CelsiusTemp, Mode=OneWay}"/></TextBlock>

এটি প্রকৃত তাপমাত্রার মানটি প্রদর্শনের জন্য সূক্ষ্ম কাজ করে তবে আমি এই মানটি ফর্ম্যাট করতে চাই যাতে এটিতে কেবল সংখ্যার পরিবর্তে (30 30 এর পরিবর্তে 30 ডিগ্রি সেন্টিগ্রেড) থাকে। আমি স্ট্রিংফর্ম্যাট সম্পর্কে পড়ছি এবং আমি এর মতো বেশ কয়েকটি জেনেরিক উদাহরণ দেখেছি:

// format the bound value as a currency
<TextBlock Text="{Binding Amount, StringFormat={}{0:C}}" />

এবং

// preface the bound value with a string and format it as a currency
<TextBlock Text="{Binding Amount, StringFormat=Amount: {0:C}}"/>

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

উত্তর:


217

আপনার প্রথম উদাহরণটি কার্যকরভাবে যা আপনার প্রয়োজন:

<TextBlock Text="{Binding CelsiusTemp, StringFormat={}{0}°C}" />

20
Xaml এ স্ট্রিং ফর্ম্যাটে কেন নেতৃস্থানীয় খালি রয়েছে {}?
জোন্সোপলিস

6
@ জোন্সোপলিস এটি ডক্সে রয়েছে - তবে যদি আপনার ফর্ম্যাট স্ট্রিংটি একটি দিয়ে শুরু হয় তবে {এটি পালানোর জন্য একটি ব্যবস্থা সরবরাহ করে, যেহেতু {}xaml এর ইতিমধ্যে অর্থ রয়েছে।
রিড কোপসি

5
ডকুমেন্টেশন যেখানে শীর্ষস্থানীয় explains explains ব্যাখ্যা করে তা আমি দেখতে পাই না}
এরিক

5
@ এরিক অনেক ডকুমেন্টেশনের মতোই দুর্গন্ধযুক্ত - তারা এটি ডেমো করে তবে ব্যাখ্যা করেন না।
রিড কোপসি

19
: রহস্যময় {} ডকুমেন্টেশন এখানে msdn.microsoft.com/en-us/library/ms744986.aspx
Jotrius

106

এখানে একটি বিকল্প রয়েছে যা পাঠযোগ্যতার জন্য ভাল কাজ করে যদি আপনার স্ট্রিংয়ের মাঝখানে বাঁধাই বা একাধিক বাইন্ডিং থাকে:

<TextBlock>
  <Run Text="Temperature is "/>
  <Run Text="{Binding CelsiusTemp}"/>
  <Run Text="°C"/>  
</TextBlock>

<!-- displays: 0°C (32°F)-->
<TextBlock>
  <Run Text="{Binding CelsiusTemp}"/>
  <Run Text="°C"/>
  <Run Text=" ("/>
  <Run Text="{Binding Fahrenheit}"/>
  <Run Text="°F)"/>
</TextBlock>

6
আমি এই উত্তরটি কিছুটা ভাল পছন্দ করি কারণ আমি স্ট্রিং লাইব্রেরি থেকে সহজেই পাঠ্য সন্নিবেশ করতে পারি। অবশ্যই যদি আপনি আন্তর্জাতিকীকরণের বিষয়ে সত্যই চিন্তিত হন তবে আপনি সম্ভবত একটি রূপান্তরকারী ব্যবহার করে আরও ভাল থাকবেন যাতে সংখ্যা এবং ইউনিটগুলির ক্রম স্থির হয় না। <টেক্সট চালান = "{x: স্ট্যাটিক গুলি: ইউআইএসআরটিংস.জেনারাল_ফাহারহাইট অ্যাক্রোবিয়েশন}" />
ম্যাট বেকার

1
এটি দুর্দান্ত সমাধান, তবে আমি টেক্সট রানগুলির মধ্যে চূড়ান্ত পাঠ্য প্রদর্শনে অতিরিক্ত স্থান পাচ্ছি - কেন কোনও ধারণা কেন? আপনার উদাহরণে আমি দেখতে পাই0 °C ( 32 °F)
কনরাড

আপনি যদি সত্যিকারের স্ট্রিং ফর্ম্যাটিং করতে চান (তবে দশমিক জায়গাগুলির সংখ্যা নিয়ন্ত্রণ করুন ইত্যাদি) তবে এটি কার্যকর নয়।
BrainSlugs83

5
@ কনরাড আপনি যদি প্রতিটি রানের মধ্যে শূন্যস্থান না চান তবে আপনার এই রানগুলি নীচের মতো একটি লাইনে রাখা উচিত: <টেক্সটব্লক> <রান টেক্সট = "{বাইন্ডিং সেলসিয়াসটিম্প}" /> <রান টেক্সট = "° সি" / > <টেক্সট চালান = "(" /: <পাঠ্য পাঠান = "{বাঁধাই ফারেনহাইট}" /> <টেক্সট চালান = "° এফ)" /> << টেক্সট ব্লক>
লাডিসালভ অ্যান্ড্রিস

92

দয়া করে মনে রাখবেন যে বাইন্ডিংগুলিতে স্ট্রিংফর্ম্যাট ব্যবহার করা কেবল "পাঠ্য" বৈশিষ্ট্যের জন্য কাজ করে বলে মনে হচ্ছে। Label.Content জন্য এই ব্যবহার কাজ না করবে না


15
একটি অত্যন্ত গুরুত্বপূর্ণ পয়েন্ট যা আমি মরিয়া না হওয়া এবং আমার সন্দেহকে বৈধতা দেওয়ার জন্য এই মন্তব্যটি না পাওয়া পর্যন্ত চেষ্টা করেছিলাম।
ডনবয়েট নট

64
ContentStringFormatরেসকিউ, উদাহরণস্বরূপ আসে: Content="{Binding Path=TargetProjects.Count}" ContentStringFormat="Projects: {0}"
astroalker

2
ধন্যবাদ ক্যাস্পার, তথ্য পোস্ট করার জন্য সত্যিকারের নায়ক।
ডায়েজগুই 21

5
গ্রিডভিউ কলাম শিরোলেখগুলির জন্য, ব্যবহার করুনHeaderStringFormat="{}{0} For Report"
ফেলিক্স

2
আপনি যদি ডিজাইনের সময় ডেটা ব্যবহার করেন তবে মনে হয় ডিজাইনারকে প্রতিফলিত করার জন্য কনটেন্ট স্ট্রিংফর্ম্যাট সম্পাদনার পরে আপনাকে প্রকল্পটি পুনর্নির্মাণ করতে হবে, অন্যদিকে স্ট্রিংফর্ম্যাট যেমন টেক্সট বাক্সটি রিয়েলটাইমটিতে ডিজাইনারকে আপডেট করবে say
রিচার্ড মুর

-8

এক্সএএমএল এ

<TextBlock Text="{Binding CelsiusTemp}" />

ইন ViewModel, এইভাবে মান নির্ধারণও কাজ করে:

 public string CelsiusTemp
        {
            get { return string.Format("{0}°C", _CelsiusTemp); }
            set
            {
                value = value.Replace("°C", "");
              _CelsiusTemp = value;
            }
        }

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