когда изменяется выбранное значение связанного столбца со списком, как изменить выбранные значения для других столбцов? - PullRequest
0 голосов
/ 01 февраля 2012

C #, WPF, связанный DataGrid Два столбца со списком, оба связаны с некоторыми источниками данных, Что я хочу: Когда пользователи выбирают элемент из одного столбца комбинированного списка, выбранное значение и список элементов для другого столбца комбинированного списка изменяются автоматически. То, что я увидел сейчас, изменилось в источнике данных во втором столбце, а также выбранное значение. но пользовательский интерфейс показывает пустой, как будто нет выбора. Когда я щелкаю по второму столбцу, отображается правильное выбранное значение. Я чувствую, что мне нравится триггер события, когда выбор первого комбинированного списка изменяется, сообщите второму комбинированному списку. но не уверен, как это реализовать. спасибо

       <dg:DataGrid Grid.Row="1" x:Name="basketDG" Margin="5 0 5 0" Background="White"
              AutoGenerateColumns="False" 
              Style="{StaticResource DataGridStyle}"
              SelectionMode="Extended"
              GridLinesVisibility="None"
              HeadersVisibility="Column" RowDetailsVisibilityMode="VisibleWhenSelected"
              ItemsSource="{Binding BasketItems, Mode=OneWay}" CanUserAddRows="False" CanUserDeleteRows="False"
              SelectionUnit="FullRow" SelectedItem="{Binding SelectedRelComplete}" 
              VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
              SelectionChanged="BasketDgSelectionChanged"                  
              Drop="DataGridDrop" 
              DragOver="DataGridDragOver"
              PreviewMouseUp="DGMouseUpEvent"
              AllowDrop="True"
                     ContextMenuOpening="basketDG_ContextMenuOpening"
             >
                <!-- Column definition -->

                 <dg:DataGridComboBoxColumn Width="200" Header="Column" 
                    SelectedValueBinding="{Binding Path=ObjParams.ColumnName, UpdateSourceTrigger=PropertyChanged, 
                    diagnostics:PresentationTraceSources.TraceLevel= High}"
                    DisplayMemberPath="ColName"
                    SelectedValuePath="ColName">
                    <dg:DataGridComboBoxColumn.ElementStyle>
                        <Style TargetType="ComboBox">
                            <Setter Property="ItemsSource" Value="{Binding Obj.Columns}" />
                        </Style>
                    </dg:DataGridComboBoxColumn.ElementStyle>
                    <dg:DataGridComboBoxColumn.EditingElementStyle>
                        <Style TargetType="ComboBox">
                            <Setter Property="ItemsSource" Value="{Binding Obj.Columns}" />
                        </Style>
                    </dg:DataGridComboBoxColumn.EditingElementStyle>
                </dg:DataGridComboBoxColumn>

                <dg:DataGridComboBoxColumn Header="Time Unit" SelectedValueBinding="{Binding ObjParams.TimeUnit}">
                    <dg:DataGridComboBoxColumn.ElementStyle>
                        <Style TargetType="ComboBox">
                            <Setter Property="ItemsSource" Value="{Binding TimeUnitList}" />
                        </Style>
                    </dg:DataGridComboBoxColumn.ElementStyle>
                    <dg:DataGridComboBoxColumn.EditingElementStyle>
                        <Style TargetType="ComboBox">
                            <Setter Property="ItemsSource" Value="{Binding TimeUnitList}" />
                        </Style>
                    </dg:DataGridComboBoxColumn.EditingElementStyle>
                </dg:DataGridComboBoxColumn>

            </dg:DataGrid.Columns>               

        </dg:DataGrid>

1 Ответ

0 голосов
/ 01 февраля 2012

Всякий раз, когда вы связываетесь с другим элементом, вы должны использовать:

{Binding ElementName=sourceElementName, Path=sourceElementProperty}

Также рассмотрите направление. Если источник будет единственным, выполняющим обновление, добавьте:

{Binding ElementName=sourceElementName, Path=sourceElementProperty, Mode=OneWay}

к этой привязке. Или вы можете обновить оба направления, используйте:

{Binding ElementName=sourceElementName, Path=sourceElementProperty, Mode=TwoWay}

Если вы хотите использовать чистый MVVM, то оба элемента управления должны быть привязаны к одному и тому же свойству и разрешить вашему исходному элементу только привилегию Mode = TwoWay.

Джон Папа говорит это очень хорошо.

Привязка данных в WPF http://msdn.microsoft.com/en-us/magazine/cc163299.aspx

...