Silverlight XAML:绑定到EntityClass中来自Assosiated EntityCollection(高级?!)的属性

问题描述:

此问题与question有关。Silverlight XAML:绑定到EntityClass中来自Assosiated EntityCollection(高级?!)的属性

我有一个EF模型,如this

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

所有的用户答案都存储在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的。

t。

+0

您是否在VS的输出窗口中看到任何绑定异常? – Timores 2010-10-04 14:42:58

+0

'AnswerAlternativeId'property not found on'Question:4''RIAmedlemsdatabase.Web.Models.Question'(HashCode = 6114302)。 BindingExpression:Path ='AnswerAlternativeId'DataItem ='Question:4';目标元素是'System.Windows.Controls.ComboBox'(Name ='');目标属性是'SelectedValuePath'(类型'System.String').. System.Windows.Data错误:BindingExpression路径错误:在'PersonQA'上找不到'AnswerFreetext'属性System.ServiceModel.DomainServices.Client.EntityCollection'1 [RIAmedlemsdatabase.Web.Models.PersonQA]'BindingExpression:Path ='PersonQA.AnswerFreetext'... – Thomas 2010-10-05 06:48:59

+1

我已经编辑了SelectedValuePath上的Path元素。现在,上面的例外几乎没有了! :) 现在的问题是TextBox绑定到Question对象中的集合。如何绑定到对象集合中的单个对象属性? ValueConverter? – Thomas 2010-10-05 12:42:55

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

此外,我发现通过使用ViewModelProxy类(datacontext代理),我可以访问数据模板内相对绑定之外的AnswerAlternative集合。在这里阅读全部内容:http://weblogs.asp.net/dwahlin/archive/2009/08/20/creating-a-silverlight-datacontext-proxy-to-simplify-data-binding-in-nested-controls.aspx