我有一个相当复杂的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转换为:对抗性,住院医师,住院医师
每次破坏都是自己表格中的关键字段。
这是我桌子的设计。
我正在尝试让我的下级控件更改每个孩子,因为新的选择已经完成。我有那个工作。现在,虽然当我选择顶部列表时,我希望底部列表反映所选项目的分类。我也可以通过绑定One-Way来完成这项工作。
如果我没有绑定,我得到这个ErrorMessage:“属性'TaxonomySpecializationID'是对象的关键信息的一部分,不能被修改。”
理想情况下,我希望能够做的是使用列表框更改所选DoctorTaxonomy的分类。也许它不会起作用......
答案 0 :(得分:0)
我解决这个问题的方法是创建一个具有当前需要值的新项目,从集合中删除原始值,然后插入新项目。