টেক্সটব্লকগুলির একটি স্ট্যাক ব্যবহারের পরিবর্তে স্ট্রিংগুলি সংযুক্ত করে


91

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

    <DataTemplate DataType="{x:Type myNameSpace:Customer}">
        <StackPanel Orientation="Horizontal" Margin="10">
            <CheckBox"></CheckBox>
            <TextBlock Text="{Binding Path=Number}"></TextBlock>
            <TextBlock Text=" - "></TextBlock>
            <TextBlock Text="{Binding Path=Name}"></TextBlock>
        </StackPanel>
    </DataTemplate>

সুতরাং আমি মূলত যা চাই তা হ'ল একটি সহজ তালিকা (চেকবাক্স সহ) - এতে NUMBER - NAME রয়েছে। এমন কোনও উপায় নেই যেখানে আমি বাইন্ডিংয়ের অংশে সরাসরি সংখ্যা এবং নামটি সংহত করতে পারি?

উত্তর:


175

স্ট্রিংফর্ম্যাট সম্পত্তি রয়েছে (.NET 3.5 এসপি 1 এ), যা আপনি সম্ভবত ব্যবহার করতে পারেন। এবং দরকারীফুল WPF বাঁধাই করা চিট শীট এখানে পাওয়া যাবে । যদি এটি সহায়তা না করে তবে আপনি সর্বদা নিজের বস্তুর জন্য নিজের ভ্যালু কনভার্টার বা কাস্টম সম্পত্তি লিখতে পারেন।

সন্ধান করা হয়েছে, আপনি মাল্টবাইন্ডিং সহ স্ট্রিংফর্ম্যাট ব্যবহার করতে পারেন। আপনার ক্ষেত্রে কোডটি এরকম কিছু হবে:

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

আমাকে স্থানের সাথে ফর্ম্যাট স্ট্রিংটি শুরু করতে হবে, অন্যথায় ভিজ্যুয়াল স্টুডিওটি তৈরি করবে না, তবে আমি মনে করি আপনি এটির চারপাশে পথ খুঁজে পাবেন :)

সম্পাদনা করুন
দ্য স্থান StringFormat প্রয়োজন হয় চিকিত্সা থেকে পার্সার রাখার {0}প্রকৃত বাঁধাই হিসাবে। অন্যান্য বিকল্পগুলি:

<!-- use a space before the first format -->
<MultiBinding StringFormat=" {0} - {1}">

<!-- escape the formats -->
<MultiBinding StringFormat="\{0\} - \{1\}">

<!-- use {} before the first format -->
<MultiBinding StringFormat="{}{0} - {1}">

29
স্থানটির পরিবর্তে আপনি {} ব্যবহার করতে পারেন, উদাহরণস্বরূপ স্ট্রিংফর্ম্যাট = "{} {0} - {1}"
ব্রায়ান অ্যান্ডারসন

6
আপনি ব্যাকস্ল্যাশগুলি সহ বন্ধনীগুলি থেকেও বাঁচতে পারেন: <মাল্টিবাইন্ডিং স্ট্রিংফর্ম্যাট = "\ {0 \} - \ {1 \}">
হুগড্রাউন

এছাড়াও, বন্ধ হওয়া পাঠ্যব্লকটি অনুপস্থিত, সুতরাং মন্তব্যগুলির সংক্ষিপ্তসার হিসাবে: <টেক্সটব্লক> <টেক্সট ব্লক। পাঠ্য> <মাল্টিবাইন্ডিং স্ট্রিংফর্ম্যাট = "{} {0} - {1}"> <বাইন্ডিং পাথ = "সংখ্যা" /> <বাইন্ডিং পাথ = "নাম" /> </ MultiBinding> </TextBlock.Text> </ TextBlock>
TJKjaer

@ পাইরএক্স @ আমি যদি 'নাম' খালি খালি 'নম্বর' দেখাতে চাই তবে আমি কীভাবে এটি করব?
দাসদাস

@ ডাসডাস দুর্ভাগ্যক্রমে আমি বেশ কয়েক বছর ধরে ডব্লিউপিএফের সাথে কাজ করি নি বলে আপনার প্রশ্নে সহায়তা করতে সক্ষম হবো না। আপনি যে জিনিসগুলির সাথে আর কাজ করছেন না তা আপনি কত দ্রুত ভুলে গেছেন তা মজার বিষয় funny
পাইআরএক্স

66

আপনি যদি একটি স্ট্যাটিক পাঠ্যের সাথে একটি গতিশীল মানটি সম্পাদন করতে চান তবে এটি চেষ্টা করুন:

<TextBlock Text="{Binding IndividualSSN, StringFormat= '\{0\} (SSN)'}"/>

প্রদর্শনগুলি : 234-334-5566 (এসএসএন)


4
টেক্সটব্লকফেল্ট স্টাইলের সামগ্রী কী?
itsho

এটি একটি কাস্টম স্টাইল যা আমাকে পাঠ্যবন্ধকে বামে সারিবদ্ধ করতে হবে। এখানে এর কোন তাত্পর্য নেই।
রেডস্কুল

4
স্ট্রিংয়ের সাথে বাঁধাইয়ের পক্ষে এটি সেরা সমাধান
ডেভিড

9

রান ক্লাসটি ব্যবহার করে আমার কোডে আমি নিম্নলিখিত উদাহরণটি দেখুন:

        <TextBlock x:Name="..." Width="..." Height="..."
            <Run Text="Area="/>
            <Run Text="{Binding ...}"/>
            <Run Text="sq.mm"/>
            <LineBreak/>
            <Run Text="Min Diameter="/>
            <Run Text="{Binding...}"/>
            <LineBreak/>
            <Run Text="Max Diameter="/>
            <Run Text="{Binding...}"/>
        </TextBlock >

3

আপনি একটি বাইবেল রানও ব্যবহার করতে পারেন। দরকারী স্টাফ, বিশেষত যদি কেউ কিছু পাঠ্য বিন্যাস (রঙ, ফন্টওয়েট ইত্যাদি) যুক্ত করতে চায়।

<TextBlock>
   <something:BindableRun BoundText="{Binding Number}"/>
   <Run Text=" - "/>
   <something:BindableRun BoundText="{Binding Name}"/>
</TextBlock>

এখানে একটি আসল বর্গ:
এখানে কিছু অতিরিক্ত উন্নতি দেওয়া হয়েছে।
এবং এটিই কোডের এক টুকরো:

public class BindableRun : Run
    {
        public static readonly DependencyProperty BoundTextProperty = DependencyProperty.Register("BoundText", typeof(string), typeof(BindableRun), new PropertyMetadata(new PropertyChangedCallback(BindableRun.onBoundTextChanged)));

        private static void onBoundTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            ((Run)d).Text = (string)e.NewValue;
        }

        public String BoundText
        {
            get { return (string)GetValue(BoundTextProperty); }
            set { SetValue(BoundTextProperty, value); }
        }

        public BindableRun()
            : base()
        {
            Binding b = new Binding("DataContext");
            b.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(FrameworkElement), 1);
            this.SetBinding(DataContextProperty, b);
        }
    }

4
<পাঠ্য পাঠ্য = "inding বাঁধাই ...}" />? আপনি কি সুবিধা ব্যাখ্যা করতে পারেন?
ফেলিক্স কেইল

4
কোনও পার্থক্য নেই; 10 বছর আগে যখন এই উত্তরটি লেখা হয়েছিল তখন রান পাঠ্যের সম্পত্তিতে বাইন্ডিং সমর্থন করে না!
josh2112
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.