2010-10-04 48 views
0

此問題與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

回答

0

我找到了我的問題的答案。它通過相反的方式看問題來解決問題。通過迭代答案而不是問題,我幾乎在那裏。

此外,我發現通過使用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