Silverlight XAML:从关联的EntityCollection绑定到EntityClass中的属性(高级?!)

时间:2010-10-04 13:58:33

标签: xaml binding silverlight-4.0 path

此问题与此question有关。

我有一个像this这样的EF模型。

使用Silverlight 4我有一个应用程序向用户显示问题,通过QuestionSet定义。如果问题有多个答案替代,则会渲染一个ComboBox。如果只给出一个替代,则渲染TextBox,用户可以在其中放置freetext。

所有用户答案都存储在PersonQA实体中。但这里有一个问题:当呈现TextBox时,我无法找到正确的路径并绑定到属性“AnswerFreetext”(在PersonQA中)。 我做错了什么?

XAML:

        <ListBox x:Name="QAListBox" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectedIndex="-1" 
             ItemsSource="{Binding Questions}" IsTabStop="True" TabIndex="5" 
             ScrollViewer.HorizontalScrollBarVisibility="Auto" Margin="10" BorderThickness="0">
            <ListBox.Resources>
                <fx:EqualityToVisibilityConverter x:Key="converter"
                    TrueValue="Visible" FalseValue="Collapsed" />
                <fx:CollectionToFirstElementConverter x:Key="collectiontoitem" />
            </ListBox.Resources>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid d:DesignWidth="931" d:DesignHeight="61" d:IsLocked="True" Margin="0">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width=".80*" MinWidth="800"/>
                            <ColumnDefinition Width=".20*" MinWidth="200"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding Path=QuestionText}" Padding="10" FontSize="21.333" FontWeight="Bold" Margin="0" Grid.Column="0" d:IsLocked="True" />
                        <ComboBox ItemsSource="{Binding AnswerAlternative, Mode=OneWay}" 
                            SelectedValuePath="AnswerAlternativeId" DisplayMemberPath="AnswerText"
                            FontSize="21.333" FontWeight="Bold" Grid.Column="1" Margin="60,0,0,0" d:IsLocked="True" SelectionChanged="ComboBox_SelectionChanged"
                            Visibility="{Binding Path=AnswerAlternative.Count, Converter={StaticResource converter}, ConverterParameter=2}">
                        </ComboBox>
                        <TextBox Grid.Column="1" Margin="60,0,0,0" Text="{Binding Path=PersonQA.AnswerFreetext, Mode=TwoWay}"
                                 Visibility="{Binding AnswerAlternative.Count, Converter={StaticResource converter}, ConverterParameter=1}" />
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

XAML有一个ViewModel类作为DataContext,它暴露了问题 IEnumerable。

吨。

1 个答案:

答案 0 :(得分:0)

我找到了问题的答案。它通过以相反的方式查看问题来解决它。通过迭代答案而不是问题,我几乎就在那里。

此外,我发现通过使用ViewModelProxy-class(datacontext代理),我能够在datatemplate内部的相对绑定之外访问AnswerAlternative集合。在此处阅读所有相关内容:http://weblogs.asp.net/dwahlin/archive/2009/08/20/creating-a-silverlight-datacontext-proxy-to-simplify-data-binding-in-nested-controls.aspx