【问题标题】:when selected value of a bound combobox column changes, how to change selected values for other columns?当绑定的组合框列的选定值发生更改时,如何更改其他列的选定值?
【发布时间】:2012-01-31 23:33:32
【问题描述】:

C#、WPF、绑定 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>

【问题讨论】:

    标签: c# wpf datagrid eventtrigger datagridcomboboxcolumn


    【解决方案1】:

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

    {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

    【讨论】:

    • 谢谢。阅读。我有一个解决方案或解决方法来让它工作。当第一列的选定值发生变化时,在绑定属性的设置器中,我添加了 OnPropertyChanged(第二个绑定属性),因此它会告诉第二个组合框列进行更新。谢谢
    猜你喜欢
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    相关资源
    最近更新 更多