0

C#、WPF、バインドされた DataGrid 2 つのコンボボックス列、両方ともいくつかのデータソースにバインドされています。ユーザーが 1 つのコンボボックス列から項目を選択すると、他のコンボボックス列の選択された値と項目リストが自動的に変更されます。私が今見たのは、2 番目の列のデータソースが変更され、選択された値も変更されたことです。しかし、UI は何も選択されていないかのように空で表示されます。2 番目の列をクリックすると、選択した正しい値が表示されます。私は、最初のコンボボックスの選択が変化したときにイベントトリガーが好きなように感じ、2番目のコンボボックスに通知します。しかし、それを実装する方法がわかりません。ありがとう

       <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>
4

1 に答える 1

0

別の要素にバインドするときはいつでも、次を使用する必要があります。

{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

于 2012-02-01T02:35:52.713 に答える