根据父datacontext中的当前项显示选定的组合框项

时间:2014-05-19 07:19:09

标签: wpf xaml data-binding datacontext

我有一个wpf应用程序,它以只读模式显示Label,并在编辑模式下显示ComboBox。当用户单击“编辑”按钮时,标签将被隐藏,ComboBox将变为可见(使用BooleanToVisibilityConverter)。

ComboBox的ItemsSource设置为其查找表(通过 auditorsViewSource ),TextBox的DataContext设置为父表(通过 auditStatementsViewSource )。

这是我的xaml:

<!-- Auditor info -->
<StackPanel Orientation="Horizontal" DataContext="{StaticResource auditStatementsViewSource}">
  <StackPanel Orientation="Horizontal" >
    <Label Content="Auditor:" Name="lblAuditor" />

    <!-- readonly data -->
    <StackPanel Style="{StaticResource VisibleWhenReadOnly}">
      <TextBox Name="txtAuditor" >
        <TextBox.Text>
          <MultiBinding StringFormat="{}{0} {1}">
            <Binding Path="Auditor.GivenName"/>
            <Binding Path="Auditor.Surname"/>
          </MultiBinding>
        </TextBox.Text>
      </TextBox>
    </StackPanel>

    <!-- editable data -->
    <StackPanel Style="{StaticResource CollapsedWhenReadOnly}" >
      <ComboBox x:Name="cboAuditor" IsSynchronizedWithCurrentItem="True"  DisplayMemberPath="Surname" 
                ItemsSource="{Binding Source={StaticResource auditorsViewSource}}" 
                SelectedItem="{Binding Source=txtAuditor, Path=Auditor.Surname, Mode=TwoWay}" />
    </StackPanel>
  </StackPanel>
</StackPanel>

ComboBox正确显示基础(审核员)表中的项目,但显示表格中的第一条记录(根据ORDER BY子句)。如何让它最初显示当前( auditStatements )记录中的项目(即,readonly标签显示的Auditor),最好是在xaml中?

1 个答案:

答案 0 :(得分:0)

通常情况下,Binding属性ComboBox.SelectedItem的效果最佳,如果您是Binding来自集合的实际元素,该数据绑定到{{1属性。由于您使用ComboBox.ItemsSource集合中的实际元素,您可能需要做一些不同的事情。

可能的解决方案是让您使用ItemsSourceSelectedValueSelectedValuePath属性。有关使用此方法访问所选项目的完整详细信息,请参阅MSDN上的How to: Use SelectedValue, SelectedValuePath, and SelectedItem页面。