কীভাবে একক ডাব্লুপিএফ টেক্সটব্লকে একাধিক মান বাঁধবেন?


210

আমি বর্তমানে TextBlockনামের একটি সম্পত্তির মান আবদ্ধ করতে নীচে ব্যবহার করছি Name:

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

এখন, আমি একই নামের অন্য একটি সম্পত্তি বাঁধতে চাই ।IDTextBlock

দুই বা ততোধিক মান একই সাথে বাঁধাই সম্ভব TextBlock? এটি কি সরল মনমুগ্ধকরণ দিয়ে সম্পন্ন করা যেতে পারে, যেমন Name + IDএবং যদি না হয় তবে অন্য কীভাবে এটি যোগাযোগ করা যেতে পারে?

উত্তর:


434

আপনি সম্পত্তি MultiBindingসঙ্গে মিলিত ব্যবহার করতে পারেন StringFormat। ব্যবহার নিম্নলিখিত অনুরূপ হতে পারে:

<TextBlock>
    <TextBlock.Text>    
        <MultiBinding StringFormat="{}{0} + {1}">
            <Binding Path="Name" />
            <Binding Path="ID" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

এর Nameমান Fooএবং IDএকটি মান প্রদান করা 1, টেক্সটব্লকটিতে আপনার আউটপুটটি তখন হবে Foo + 1

Note: এটি কেবলমাত্র নেট .NET 3.5 এসপি 1 এবং 3.0 এসপি 2 বা তার পরে সমর্থিত।


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

2
এটির একটি পার্শ্ব-প্রভাব রয়েছে is আপনি যদি এই পদ্ধতিটি কোনও DataGridবাছাইয়ের আচরণের মতো ব্যবহার করেন তবে দুর্ভাগ্যক্রমে কাজ হয় না। আরও উপযুক্ত সমাধান হ'ল আপনার মডেলটিতে কেবলমাত্র পঠনযোগ্য সম্পত্তিটি উপযুক্ত স্ট্রিং বিন্যাসের সাথে আবদ্ধ করার জন্য তৈরি করা। বলা বাহুল্য, এটি সামান্য ভার্বোস হলেও দ্রুত বিন্যাস করার একটি ঝরঝরে উপায়।
ব্রেট রায়ান

34
আপনার কেবলমাত্র {} প্রয়োজন যখন ফর্ম্যাট স্ট্রিংটি প্যারামিটার starts 0} দিয়ে শুরু হয়, বিন্যাসের স্ট্রিংটি কোনও পাঠ্য দিয়ে শুরু হয় তবে এটির প্রয়োজন হয় না। উদা: "{1} এর" {} {0} + {1} "" পৃষ্ঠা {0} "
ডাকিয়ন্ত

এটা একটা WPF প্রকল্পের নেট উপর কাজ করে নি 4.0 ভিসুয়াল স্টুডিও 2017.
Sorush

@ প্যাট্রিকের সমাধান আমার পক্ষে কাজ করেছে। আমি এই কাজ করতে পারেন না। আমার এই ত্রুটি ছিলXamlParseException: A 'Binding' cannot be set on the 'Path' property of type 'Binding'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.
টাইসন উইলিয়ামস

127

আমি জানি যে এটি এক দেরিতে, তবে আমি ভেবেছিলাম এটি করার আরও একটি উপায় যুক্ত করব।

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

<TextBlock>
  <Run Text="Name = "/>
  <Run Text="{Binding Name}"/>
  <Run Text=", Id ="/>
  <Run Text="{Binding Id}"/>
</TextBlock>

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

আমি এই চেষ্টা করেছি। এটি কাজ করে, তবে প্রতিটি উপাদান (এমনকি জ্যামিতি) যে অঙ্কিত হয় (একটি রিফ্রেশে) এখন কোনও কারণে প্রতিটি টিককে জ্বলজ্বল করে। অন্য পদ্ধতি চেষ্টা করতে যাচ্ছি।
লোগান ক্লেনার

6
আদেশটি হার্ডকোডযুক্ত হওয়ায় পাঠ্যটিকে স্থানীয়করণ করতে হলে এটি কঠিন হতে পারে।
ব্লুএম

1
এই পদ্ধতির আর একটি ব্যবহার প্রতিটি বাঁধাইয়ের জন্য আলাদা স্টাইল প্রয়োগ করছে
হামিদ নাeeমি

2019 এর সেরা উত্তর
F:5bio বিসি সূজা

23

যদি এটি কেবল পাঠ্যব্লক হয়ে থাকে (এবং এইভাবে একটি উপায় বাঁধাই করা), এবং আপনি কেবল মানগুলি সামঞ্জস্য করতে চান, কেবল দুটি পাঠ্যব্লোককে আবদ্ধ করুন এবং সেগুলি একটি অনুভূমিক স্ট্যাকপ্যানেলে রেখে দিন।

    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Name}"/>
        <TextBlock Text="{Binding ID}"/>
    </StackPanel>

এটি কোনও কোডিং না করেই পাঠ্যটি প্রদর্শন করবে (যা সমস্ত পাঠ্যব্লকই করছে)। এগুলি সঠিকভাবে দেখানোর জন্য আপনি তাদের উপর সামান্য মার্জিন রেখে দিতে পারেন।


11

একটি ValueConverter ব্যবহার করুন

[ValueConversion(typeof(string), typeof(String))]
public class MyConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return string.Format("{0}:{1}", (string) value, (string) parameter);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {

        return DependencyProperty.UnsetValue;
    }
}

এবং মার্কআপে

<src:MyConverter x:Key="MyConverter"/>

। । ।

<TextBlock Text="{Binding Name, Converter={StaticResource MyConverter Parameter=ID}}" />

হ্যাঁ - এটি 6 বছর আগে লেখা হয়েছিল এবং আপনি "নাম" রূপান্তরকারীকে প্রথম যুক্তি হিসাবে (কোডে মান বলে) এবং দ্বিতীয় যুক্তি হিসাবে আইডি (প্রশ্নটির একটি স্ট্রিং) আবদ্ধ করছেন b
প্রীত সংঘ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.