2010-10-04 5 views
0

Cette question concerne cette question.Silverlight XAML: Liaison à la propriété dans EntityClass à partir de EntityCollection assosiated (advanced ?!)

J'ai un modèle EF comme this. Utilisation de Silverlight 4 J'ai une application montrant des questions à l'utilisateur, définies par le QuestionSet. Si une question a plus d'une réponse alternative, un ComboBox est rendu. Si une seule alternative est donnée, un TextBox est rendu, dans lequel l'utilisateur peut mettre le texte libre.

Toutes les réponses utilisateur sont stockées dans des entités PersonQA. Mais voici la question: Lorsque le TextBox est rendu, je ne suis pas en mesure de trouver le bon chemin et de lier à la propriété "AnswerFreetext" (dans PersonQA). Qu'est-ce que je fais de mal?

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> 

Le XAML a une classe ViewModel comme DataContext, qui expose Questions IEnumerable.

t.

+0

Voyez-vous une exception de liaison dans la fenêtre Sortie de VS? – Timores

+0

Propriété 'AnswerAlternativeId' introuvable dans 'Question: 4' 'RIAmedlemsdatabase.Web.Models.Question' (HashCode = 6114302). BindingExpression: Path = 'AnswerAlternativeId' DataItem = 'Question: 4'; l'élément cible est 'System.Windows.Controls.ComboBox' (Name = ''); La propriété target est 'SelectedValuePath' (tapez 'System.String') .. System.Windows.Data Erreur: BindingExpression path error: propriété 'AnswerFreetext' introuvable sur 'PersonQA' 'System.ServiceModel.DomainServices.Client.EntityCollection'1 [RIAmedlemsdatabase.Web.Models.PersonQA] 'BindingExpression: Path =' PersonQA.AnswerFreetext '... – Thomas

+1

J'ai modifié l'élément Path sur SelectedValuePath. Maintenant, les exceptions ci-dessus est presque disparu! :) Le problème est maintenant que le TextBox est lié à un objet Collection dans Question. Comment puis-je lier à une seule propriété d'objet dans une collection d'objets? ValueConverter ?? – Thomas

Répondre

0

J'ai trouvé une réponse à mon problème. Il résout en regardant le problème dans le sens opposé. En itérant sur les réponses au lieu des questions, je suis presque là.

En outre, j'ai trouvé qu'en utilisant une classe ViewModelProxy (proxy datacontext), je peux accéder à la collection AnswerAlternative en dehors de la liaison relative dans le datatemplate. Lisez tout à ce sujet ici: http://weblogs.asp.net/dwahlin/archive/2009/08/20/creating-a-silverlight-datacontext-proxy-to-simplify-data-binding-in-nested-controls.aspx

Questions connexes