Pregunta

Tengo un DataGrid que dos de sus columnas son Comboboxes (uno contiene pocos, pero no este es el problema).

Quiero, que cuando el usuario cambie el valor del primer combo, el ComboBox en la otra columna debe enlazar a una propiedad de su (esta propiedad es una colección). Diga el primer ComboBox es la categoría, quiero que cuando el usuario cambie su valor, el otro CB se rellena con los valores de (la categoría seleccionada de Primer Combo) .vendors.

¿Cómo debo hacerlo, no uso MVVM, simplemente WPF simple? No sé cuál debería ser la forma correcta de implementarlo, espero comenzar bien.

Creo que, si pudiera obtener el Otro Combobox (que se encuentra en un DataGridcell diferente) de la selección de la primera, la primera, ya que sería la mejor, porque entonces puedo restablecer su fuente en cada cambio de selección del primero. Tenga en cuenta que tengo la capacidad de llegar a la actual (la primera) DataGridCell, solo estoy buscando una forma eficiente de acceder al hermano derecho DataGridCell y luego obtener su hijo (segundo) Combo.

También tenga en cuenta que la categoría seleccionada debe variar de una fila a la fila, y el segundo combobox debe depender de la categoría de esta fila.
De hecho, intenté implementarlo para que el cobroViewSource.Source está vinculado al artículo actual (es decir, el DataContext de la fila), pero no parece funcionar.
Prefiero establecer el segundo Combo's CollectiveSource (VendorScollection) a través de un disparador de acción o manejador en la selección de la 1ª ComboBox.

Los otros comboboxes en ese campo no parecen hacer un problema ya que todos están obligados entre sí, podría usar CollectiveVieceSource.Filter, de todos modos, no es un problema para acceder a ellos, ya que son hermanos simples, no como El primero que es un primo lejano ubicado en lo profundo de otro DataGridCell.

Aquí es qué es lo que intenté hasta ahora:

<DataGrid>
    <DataGrid.Resources>
        <CollectionViewSource x:Key="CategoriesCollection" Source="{Binding Context.CategoriesList, Source={x:Static Application.Current}, IsAsync=True}" />
    </DataGrid.Resources>

    <DataGrid.Columns>

        <DataGridTemplateColumn Header="Category">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock DataContext="{Binding Category}" Text="{Binding Title}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <!--This is the first ComboBox-->
                    <ComboBox
                                IsSynchronizedWithCurrentItem="False"
                                ItemsSource="{Binding Source={StaticResource CategoriesCollection}}"
                                DisplayMemberPath="Title"
                                SelectionChanged="cbCategories_SelectionChanged"
                                SelectedItem="{Binding Category}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Style">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock DataContext="{Binding Finish.Style.Vendor}" Text="{Binding Contact.Title}"/>
                        <TextBlock DataContext="{Binding Finish.Style}" Text="{Binding Title}"/>
                        <TextBlock Text="{Binding Finish.Title}"/>
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <StackPanel>
                        <StackPanel.Resources>
                            <!--I want, that when the user selects a value in the first ComboBox,
                    the VendorsCollection below should be populated with the selected Category.Vendors,
                    or alternatively current row's data item.Category.Vendors,
                    I just donno how to access current row from these resources.-->
                            <CollectionViewSource x:Key="VendorsCollection" Source="{Binding Vendors, Source={StaticResource CategoriesCollection}}" />
                            <CollectionViewSource x:Key="StylesCollection" Source="{Binding Styles, Source={StaticResource VendorsCollection}}" />
                            <CollectionViewSource x:Key="FinishesCollection" Source="{Binding Finishes, Source={StaticResource StylesCollection}}" />
                        </StackPanel.Resources>
                        <ComboBox                                                       
                                    IsSynchronizedWithCurrentItem="True"
                                    ItemsSource="{Binding Source={StaticResource VendorsCollection}}"
                                    SelectedItem="{Binding Finish.Style.Vendor}"
                                    DisplayMemberPath="Contact.Title"/>
                        <ComboBox
                                    IsSynchronizedWithCurrentItem="True"
                                    ItemsSource="{Binding Source={StaticResource StylesCollection}}"
                                    SelectedItem="{Binding Finish.Style}"
                                    DisplayMemberPath="Title"/>
                        <ComboBox
                                    IsSynchronizedWithCurrentItem="True"
                                    ItemsSource="{Binding Source={StaticResource FinishesCollection}}"
                                    SelectedItem="{Binding Finish}"
                                    DisplayMemberPath="Title"/>
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>

    </DataGrid.Columns>
</DataGrid>

¿Fue útil?

Solución

Acabo de encontrar sus preguntas.¿Recibió su problema resuelto?Creo que su pregunta es similar a este itiene.Espero que la solución te ayude también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top