数据网格SelectedItem多重绑定



我需要将数据网格中SelectedItem的值绑定到:

  1. 同一页面上组合框的SelectedItem

  2. 视图模型中的属性

换句话说:当我在数据网格中选择一行时,组合框中的值应该改变,并且上述属性的值也应该设置为数据网格中所选项目的值。

我试着使用这样的多绑定:

<DataGrid.SelectedItem>
    <MultiBinding Converter="{StaticResource sapConverter}" >
        <Binding Path="SelectedSap" Mode="TwoWay"/>
        <Binding ElementName="cbSearchCompanyName" Path="SelectedItem" Mode="OneWay"/>                                    
    </MultiBinding>
</DataGrid.SelectedItem>

这里的SelectedSap就是我想要更新的属性。但是,当我查看转换器中的values()时,与SelectedSap对应的值(0)始终为Nothing,因此该属性不会按我的意愿更改。与组合的绑定效果良好。

我试着在没有多重绑定的情况下测试它。我的意思是,我不在乎组合,我只是在改变房产的价值。像这样:

<DataGrid.SelectedItem>
        <Binding Path="SelectedSap" Mode="TwoWay"/>
</DataGrid.SelectedItem>

一切都很好。诀窍在哪里?我应该如何实现我需要的功能?非常感谢。

我认为还有另一种实现目标的好方法:

<DataGrid Name="dgResults" ItemsSource="{Binding Path=DataGridObj}"
SelectedItem="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

也许您的绑定错误。如果您在网格中获得了项目,那么ItemsSource就可以了。使用SelectedValue并将SelectedValuePath设置为要从中获取数据的列。

跳过多重绑定,并将组合框上的绑定设置为DataGrid的SelectedValue。

<DataGrid Name="dgResults" ItemsSource="{Binding Path=DataGridObj}"
SelectedItem="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedValue="{Binding SelectedValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="ItemNoX"
感谢你!你的两个回答都给了我一个暗示。事实上,我必须将三个控件绑定在一起(想象一下"搜索项"功能——你有一个组合"按项搜索.X"、组合"按项搜索.Y"和一个包含项的数据网格),这就是为什么我有点困惑,并从多绑定开始。事情要容易得多。这是我现在工作的代码:
<StackPanel Orientation="Horizontal" Grid.Row="0" >                        
                    <Label Content="Search company by name:"/>
                    <ComboBox MinWidth="200" Width="Auto" Name="cbSearchCompanyName"
                                    ItemsSource="{Binding CompanyList,Mode=TwoWay}"
                                    IsSynchronizedWithCurrentItem="True" 
                                    DisplayMemberPath="CompanyName1"
                                    SelectedValuePath="Sap"
                              SelectedItem="{Binding Path=SelectedSap, Mode=TwoWay}"
                              SelectedValue="{Binding Path=SelectedSap.Sap, Mode=TwoWay}"/>
                    <Label Content="by SAP number:" />
                    <ComboBox MinWidth="200" Width="Auto" Style="{StaticResource marginStyle}" Name="cbSearchCompanySap"
                                    ItemsSource="{Binding CompanyList,Mode=TwoWay}"          
                                    IsSynchronizedWithCurrentItem="True" 
                                    DisplayMemberPath="Sap"
                                    SelectedValuePath="Sap"
                              SelectedItem="{Binding Path=SelectedSap, Mode=TwoWay}"
                              SelectedValue="{Binding Path=SelectedSap.Sap, Mode=TwoWay}"/>
                </StackPanel>
                <ScrollViewer Grid.Row="1" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
                    <DataGrid x:Name="CompanyList" AutoGenerateColumns="True" 
                              ItemsSource="{Binding CompanyList,Mode=TwoWay}"
                              MaxWidth="950" Height="300" Margin="0 2 0 0">                                  
                        <DataGrid.SelectedItem>
                            <Binding Path="SelectedSap" Mode="TwoWay"/>
                        </DataGrid.SelectedItem>                            
                    </DataGrid>
                </ScrollViewer>

最新更新