我需要将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,因此属性不会按我的意愿更改。 与组合的绑定工作正常。
我尝试在没有多重绑定的情况下测试它。我的意思是,我不关心组合,我只是改变了属性的价值。像这样:
<DataGrid.SelectedItem>
<Binding Path="SelectedSap" Mode="TwoWay"/>
</DataGrid.SelectedItem>
一切正常。
诀窍在哪里,我应该如何实现我需要的功能?
谢谢。
答案 0 :(得分: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 :(得分:1)
<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>
答案 2 :(得分:1)
我认为还有另一种实现目标的好方法:
<DataGrid Name="dgResults" ItemsSource="{Binding Path=DataGridObj}"
SelectedItem="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>