ডাব্লুপিএফ ডেটাবাইন্ডিং: আমি কীভাবে "প্যারেন্ট" ডেটা প্রসঙ্গে প্রবেশ করব?


215

আমার একটি উইন্ডোতে একটি তালিকা রয়েছে (নীচে দেখুন)। উইন্ডোটির DataContextদুটি বৈশিষ্ট্য রয়েছে Itemsএবং AllowItemCommand।

উইন্ডোটির বিপরীতে সমাধান করার জন্য আমি কীভাবে Hyperlinkতার Commandসম্পত্তির বাধ্যবাধকতা পেতে পারি DataContext?

<ListView ItemsSource="{Binding Items}">
  <ListView.View>
    <GridView>
      <GridViewColumn Header="Action">
        <GridViewColumn.CellTemplate>
          <DataTemplate>
            <StackPanel>
              <TextBlock>

                <!-- this binding is not working -->
                <Hyperlink Command="{Binding AllowItemCommand}"
                           CommandParameter="{Binding .}">
                    <TextBlock Text="Allow" />
                </Hyperlink>

              </TextBlock>
            </StackPanel>
          </DataTemplate>
        </GridViewColumn.CellTemplate>
      </GridViewColumn>
    </GridView>
  </ListView.View>
</ListView>

আপনি কি ডিবাগারে প্রবেশ করতে পারেন এবং যেখানে ইউআই তৈরি হচ্ছে সেখানে যেতে পারেন? যদি তা হয় তবে আপনি ভেরিয়েবলটিতে প্রবেশ করতে পারেন এবং ড্রিল করার চেষ্টা করতে পারেন
— ist_lion

সাধারণ সমাধান (যা উইন্ডোজ 8 স্টোর / মেট্রো অ্যাপ্লিকেশনেও কাজ করে) এখানে রয়েছে: http://stackoverflow.com/questions/15366609/how-to-access-parents-datacontext-in-window-8-store-apps/15419382 # 15419382
— এলএমকে

উত্তর:


417

আপনি এরকম কিছু চেষ্টা করতে পারেন:

...Binding="{Binding RelativeSource={RelativeSource FindAncestor, 
AncestorType={x:Type Window}}, Path=DataContext.AllowItemCommand}" ...

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

1
উইন্ডোজ 8 অ্যাপে কেউ কীভাবে এটি করতে পারে? আমি এটি কাজ করতে "এলিমেন্টনাম = ..." ব্যবহার করেছি তবে এটি ডেটা কনটেক্সট ফাঁস করে
— জরিস

3
ফুটো বলতে কী বুঝ?
— flq

দুর্ভাগ্যক্রমে আমার পক্ষে কাজ করেনি কারণ পিতামাতার একটি আলাদা ফাইলে রয়েছে।
— টমাস

@ থমাস 6767, আশা করি আপনি আপনার সমস্যাটি সমাধান করেছেন আপনার কোডটি আপনার পছন্দ করতে পারে।
— মোহাম্মদ আবরার আহমেদ

37

এটিও কাজ করবে:

<Hyperlink Command="{Binding RelativeSource={RelativeSource AncestorType=ItemsControl},
                             Path=DataContext.AllowItemCommand}" />

ListViewতার উত্তরাধিকারী হবে DataContextথেকে Window, খুব তাই এটি এই সময়ে উপলব্ধ।
এবং যেহেতু ListView, ঠিক একই জাতীয় নিয়ন্ত্রণগুলির (যেমন Gridview, ListBoxইত্যাদি) একটি উপশ্রেণী ItemsControl, তাই এই Bindingজাতীয় নিয়ন্ত্রণগুলি পুরোপুরি কার্যকর হবে।


15
(পোস্টার এবং সম্পাদকটির দিকে তাকিয়ে) আমার এই পোস্টটি মজার মনে হয়েছে ...: ডি
— জ্যাক ফ্রস্ট

@ জ্যাকফ্রস্ট যদি যোদা আবার কায়লো'র কাজে হস্তক্ষেপ করে। কিলো ইয়োদা মারতে চলেছে। : পি
— কিলো রেন

না, সে পারে না। যোদা এখন বলের সাথে এক। হিহেহে
— জ্যাক ফ্রস্ট

10

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

RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=telerik:RadGridView}"

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