当绑定的组合框列的选定值发生更改时,如何更改其他列的选定值?

当绑定的组合框列的选定值发生更改时,如何更改其他列的选定值?

问题描述:

C#,WPF,bound DataGrid 两个组合框列,都绑定到一些数据源, 我想要的: 当用户从一个组合框列中选择一个项目时,其他组合框的选定值和项目列表将自动更改。 我现在看到,第二列的数据源发生了变化,选定的值也发生了变化。 但UI显示为空,就好像没有选择一样。当我点击第二列时,将显示正确的选定值。当选择第一个组合框时,我觉得我喜欢事件触发器,通知第二个组合框。但不知道如何实现它。感谢当绑定的组合框列的选定值发生更改时,如何更改其他列的选定值?

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

每当您绑定到另一个元素,你应该使用:

{Binding ElementName=sourceElementName, Path=sourceElementProperty} 

还要考虑方向。如果源将是唯一正在进行更新的人员,则请添加:

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

到那个绑定。或者你可以更新两个方向,使用:

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

如果您正在寻找利用纯MVVM,然后有两个控件绑定到相同的属性,并且只允许你的源元素的模式=双向特权。

约翰帕帕说得很好。

数据在WPF http://msdn.microsoft.com/en-us/magazine/cc163299.aspx

+0

感谢绑定。阅读。我得到了一个解决方案或解决方法来实现它的工作。当第一列的选定值发生变化时,在绑定属性的setter中,我添加了OnPropertyChanged(第二绑定属性),因此它会告诉第二个组合框列要更新。谢谢 – toosensitive 2012-02-01 16:46:41