首页 文章

Datagrid SelectedItem Multibinding

提问于
浏览
1

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

  • 同一页面上组合框的SelectedItem

  • viewmodel中的属性

换句话说:当我在datagrid中选择一行时,组合框中的值应该更改,并且上述属性的值也应该设置为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)始终为Nothing,因此属性不会按我的意愿更改 . 与组合的绑定工作正常 .

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

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

一切正常 . 诀窍在哪里,我应该如何实现我需要的功能?谢谢 .

3 回答

  • 1

    也许你的绑定是错误的 . 如果您在网格中获得了项目,那么您的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"
    
  • 1

    很多你!你的答案都给了我一个暗示 . 实际上我必须将三个控件绑定在一起(想象功能“搜索项目” - 你有一个组合“按项目搜索.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>
    
  • 1

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

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

相关问题