【问题标题】:Datagrid SelectedItem MultibindingDatagrid SelectedItem 多重绑定
【发布时间】:2012-04-07 13:52:00
【问题描述】:

我需要将数据网格中 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 对应的 value(0) 始终是 Nothing,因此该属性不会按我的意愿改变。 与组合的绑定工作正常。

我尝试在没有多重绑定的情况下对其进行测试。我的意思是,我不关心组合,我只是改变财产的价值。像这样:

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

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

【问题讨论】:

  • 为什么不直接绑定组合框上的poperty SelectedSap?所以datagrid选中的项目和combox选中的项目将绑定在与视图模式相同的属性上

标签: wpf vb.net datagrid selecteditem multibinding


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      也许你的绑定是错误的。 如果您在网格中获取项目,则您的 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"
      

      【讨论】:

        猜你喜欢
        • 2012-02-12
        • 2014-10-10
        • 2013-01-26
        • 1970-01-01
        • 2012-06-12
        • 2014-08-26
        • 2015-08-04
        • 1970-01-01
        • 2014-01-09
        相关资源
        最近更新 更多