如何从分层链接的单独列表框中编辑父ListboxItem

时间:2010-06-11 15:02:43

标签: wpf database-design data-binding wpf-controls

我有一个相当复杂的Binding情况。我有一个解决方案,我在Windows窗体中为VS2005中创建了这个,但现在我正在使用wpf重新创建控件,但我没有像以前那样完全相同。

我有一个包含以下DataTemplate的列表框控件:

<DataTemplate>
  <Border CornerRadius="5" BorderBrush="Black" BorderThickness="1">
    <StackPanel>
      <TextBlock x:Name="TaxonomyCode" Margin="2" FontWeight="Bold"
      FontSize="12">
        <TextBlock.Text>
          <MultiBinding StringFormat="{}{0}{1}{2}X">
            <Binding Path="TaxonomyTypeID" />
            <Binding Path="TaxonomyClassificationID" />
            <Binding Path="TaxonomySpecializationID" />
          </MultiBinding>
        </TextBlock.Text>
      </TextBlock>
      <TextBlock Margin="2"
      Text="{Binding ElementName=TaxonomyCode,Path=Text,Converter={StaticResource TaxonomyCodeToDescriptionConverter}}" />
    </StackPanel>
  </Border>
</DataTemplate>

下面我有3个列表框,列出了我在ViewModel上使用属性的实际分类层次结构......

<ListBox 
    Grid.Column="0" Grid.Row="1" 
    ItemsSource="{Binding TaxonomyTypeLUT}" 
    DisplayMemberPath="IDDescription" 
    SelectedItem="{Binding Path=SelectedTaxonomyType}" />
<ListBox 
    Grid.Column="1" Grid.Row="1"
    ItemsSource="{Binding SelectedTaxonomyType.TaxonomyClassifications}"
    DisplayMemberPath="IDDescription"
    SelectedItem="{Binding Path=SelectedTaxonomyClassification}" />
<ListBox 
    Grid.Column="2" Grid.Row="1"
    ItemsSource="{Binding SelectedTaxonomyClassification.TaxonomySpecializations}"
    DisplayMemberPath="IDDescription"
    SelectedItem="{Binding SelectedTaxonomySpecializations}" />

实际的datatbase绑定也很复杂。使用层次结构中每个表的多个键,因为每个表可以包含属于不同父项的相同键...例如

分类代码:207R00000X,细分为:20 7R 00000转换为:对抗疗法,内科,内科 分类代码:208M00000X,分解为:20 8M 00000转换为:对抗性,住院医师,住院医师

每次破坏都是自己表格中的关键字段。

alt text

这是我桌子的设计。

我正在尝试让我的下级控件更改每个孩子,因为新的选择已经完成。我有那个工作。现在,虽然当我选择顶部列表时,我希望底部列表反映所选项目的分类。我也可以通过绑定One-Way来完成这项工作。

如果我没有绑定,我得到这个ErrorMessage:“属性'TaxonomySpecializationID'是对象的关键信息的一部分,不能被修改。”

理想情况下,我希望能够做的是使用列表框更改所选DoctorTaxonomy的分类。也许它不会起作用......

1 个答案:

答案 0 :(得分:0)

我解决这个问题的方法是创建一个具有当前需要值的新项目,从集合中删除原始值,然后插入新项目。