سؤال

في بعض الأحيان أسهل الأمثلة هي الأصعب للعثور عليها. وبعد وبعد

لدي DataGrid مع 2 أعمدة. يحتوي عمود واحد على المعلومات، يجب أن يكون العمود الآخر مربع تحرير وسرد مع قائمة بالمستخدمين المتاحين. لا يتم ارتباط البيانات الموجودة في COMBOBOX بالبيانات في العمود الأول. ألقيت عن طريق حقيقة أن COMBOBOX لا يحتوي على DataContext، وحدها فقط، ولا يمكنني استخدامها لاستخدام ملزمة أيضا.

هل يمكن لشخص ما يرجى الإشارة إلي إلى مثال بسيط يستخدم مجموعتين بيانات مختلفا للبيانات في جدول وحمام التحرير والسرد؟

هل كانت مفيدة؟

المحلول

لا تحتوي الأعمدة الموجودة في DataGrid على DataContext، حيث يتم إضافتها أبدا إلى الشجرة المرئية. يبدو غريب بعض الشيء ولكن إلقاء نظرة على الفينس بلوق, ، حصلت على مثال جيد على التصميم المرئي. بمجرد رسم الشبكة، تحتوي الخلايا على سياق بيانات ويمكنك تعيين مصدر عناصر مربعات التحرير والسرد في استخدام الروابط العادية (وليس الموارد الثابتة ..)

يمكنك الوصول إلى مصدر عناصر مربع التحرير والسرد على هذا النحو

   <dg:DataGridComboBoxColumn>
      <dg:DataGridComboBoxColumn.EditingElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding Path=MyBindingPath}" />
        </Style>
      </dg:DataGridComboBoxColumn.EditingElementStyle>
   </dg:DataGridComboBoxColumn>

الق نظرة هنا و أيضا هنا لبعض الكود

نصائح أخرى

بدلا من استخدام DatagridTextColumns يستخدم أحد DataGridComboxColumn بدلا من ذلك. ثم يملأ المرء البيانات باستخدام OctemsSource، والذي يشير في المثال أدناه إلى تعين خارجي في المورد الثابت، وأخيرا يرتبط المرء بالنتيجة إلى الكائن الهدف الذي سيعقد اختيار المستخدم في المحدد.

<DataGrid.Columns>

<DataGridComboBoxColumn Header="MySelections"  
                        SelectedItemBinding="{Binding MySelectionsProperty}" 
                        ItemsSource="{Binding Source={StaticResource mySelectionsEnum}}" />
</DataGrid.Columns>

انظر مثالا كاملا على MSDN في DataGridComboBoxcolumn الفئة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top