Wpf Datagrid SelectedItem多重绑定

Wpf Datagrid SelectedItem多重绑定,wpf,vb.net,datagrid,selecteditem,multibinding,Wpf,Vb.net,Datagrid,Selecteditem,Multibinding,我需要将datagrid中SelectedItem的值绑定到: 选择同一页面上组合框的编辑项 viewmodel中的属性 换句话说:当我在datagrid中选择一行时,combobox中的值应该更改,Means above属性的值也应该设置为datagrid的选定项的值 我试着像这样使用多重绑定: <DataGrid.SelectedItem> <MultiBinding Converter="{StaticResource sapConverter}" >

我需要将datagrid中SelectedItem的值绑定到:

  • 选择同一页面上组合框的编辑项

  • viewmodel中的属性

  • 换句话说:当我在datagrid中选择一行时,combobox中的值应该更改,Means above属性的值也应该设置为datagrid的选定项的值

    我试着像这样使用多重绑定:

    <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)始终为空,因此属性不会按我所希望的那样更改。 与组合的绑定工作正常

    我尝试在没有多重绑定的情况下测试它。我的意思是,我不关心组合,我只是改变属性的值。像这样:

    <DataGrid.SelectedItem>
            <Binding Path="SelectedSap" Mode="TwoWay"/>
    </DataGrid.SelectedItem>
    
    
    
    一切正常。 诀窍在哪里?我应该如何实现我需要的功能?
    谢谢。

    也许你的装订错了。 如果您的项目在网格中,那么您的项目资源很好。使用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"
    

    可能您的绑定错误。
    如果您的项目在网格中,那么您的项目资源很好。使用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"
    

    非常感谢你!你的两个答案都给了我一个暗示。实际上,我必须将三个控件绑定在一起(想象一下功能“搜索项”-您有一个组合“search by item.X”、组合“search by item.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>
    

    非常感谢你!你的两个答案都给了我一个暗示。实际上,我必须将三个控件绑定在一起(想象一下功能“搜索项”-您有一个组合“search by item.X”、组合“search by item.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>
    

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

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

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

    <DataGrid Name="dgResults" ItemsSource="{Binding Path=DataGridObj}"
    SelectedItem="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
    
    
    
    为什么不直接在组合框上绑定所选的权限?因此,datagrid selected item和combox selected item将绑定在与view Mode相同的属性上,为什么不直接绑定combobox上的poperty SelectedSap?因此,datagrid selected item和combox selected item将绑定到与视图模式相同的属性上