سؤال

لدي 3 طاولات: عنصر - وهو DataContext - يحتوي على مجموعة مجموعة عمود الملاحة - لديه فئة عمود التنقل.

أريد أن أحصل على أعمدة DataGrid (فئة ومجموعة) وعندما اخترت فئة، يجب عرضها في المجموعة Color فقط الفئة.

هنا هو الرمز الذي أعمل عليه:

<tk:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}">
    <tk:DataGrid.Columns>

        <!--Works-->
        <tk:DataGridComboBoxColumn                                        
            Header="Categroy" 
            DisplayMemberPath="Title"                    
            SelectedValuePath="CategoryId"
            SelectedValueBinding="{Binding Group.Category.CategoryId}"
            ItemsSource="{Binding Context.Categories, 
                Source={x:Static Application.Current}}"
        />


        <!--Look at these two things:-->

        <!--This does work-->
        <tk:DataGridTemplateColumn>
            <tk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ItemsControl
                        ItemsSource="{Binding Group.Category.Groups}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate DataType="{x:Type data:Group}">
                                <TextBlock Text="{Binding Title}"/>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </DataTemplate>
            </tk:DataGridTemplateColumn.CellTemplate>
        </tk:DataGridTemplateColumn>

        <!--But this does NOT work, even it's the same source-->
        <!--Notice I even tried a dummy converter and doesnt reach there-->
        <tk:DataGridComboBoxColumn 
            Header="Group" 
            DisplayMemberPath="Title"
            SelectedValuePath="GroupId"
            ItemsSource="{Binding Group.Category.Groups,
                Converter={StaticResource DummyConverter}}"
            SelectedValueBinding="{Binding Group.GroupId}"
            />

    </tk:DataGrid.Columns>
</tk:DataGrid>

تحديث
هل تقول المشكلة هي أنه لا يمكن ضبط خاصية OctionSource على ربط غير ثابت؟ أظن ذلك لأنه حتى أقوم بتعيين OctemsSource {Binding} مع ال DummyConverter لا يتوقف في المحول؛ وفي فئة COMBOBOX تعمل بشكل جيد.

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

المحلول

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

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

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

الق نظرة هنا و أيضا هنا لبعض الكود. سوف تحتاج أيضا إلى قم بتعيين مصدر العناصر لعنصر غير ETTING كما في هذا بريد

نصائح أخرى

كنت أستخدم MVVM وأردت ربط ItemSource من العمود إلى مجموعة من الكائنات في سياق بيانات النافذة. يجب أن أحاول 10 طرق مختلفة و لا شيء يعمل حتى وجدت هذه الإجابة.

الحيلة هي تحديد CollectionViewSource خارج الشبكة ثم الرجوع إليها داخل الشبكة باستخدام StaticResource. وبعد علي سبيل المثال،

<Window.Resources>
    <CollectionViewSource x:Key="ItemsCVS" Source="{Binding MyItems}" />
</Window.Resources>
<!-- ... -->
<DataGrid ItemsSource="{Binding MyRecords}">
    <DataGridComboBoxColumn Header="Column With Predefined Values"
                            ItemsSource="{Binding Source={StaticResource ItemsCVS}}"
                            SelectedValueBinding="{Binding MyItemId}"
                            SelectedValuePath="Id"
                            DisplayMemberPath="StatusCode" />
</DataGrid>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top