2008-11-19 2 views
2

Ok ... Je suis nouveau sur WPF, mais je sais comment faire avec DataTriggers et les convertisseurs.Comment est-ce que je change conditionnellement les propriétés des contrôles dans le CellTemplate d'un ListView WPF lié aux données?

Mais, ce que je veux semble un peu plus complexe que cela. Permettez-moi de vous donner les détails:

Le DataContext pour le contrôle ListView est un IList d'objets (object = Room). Ce sont les chambres disponibles. J'ai un autre contrôle (disons qu'il s'agit d'un TextBox) lié à l'un des objets Room contenus dans IList. Je veux afficher une image uniquement pour la pièce (ListViewItem) liée à l'autre contrôle.

Ceci est une partie de mon XAML:

<TextBox Name="Room" /> 
<ListView Name="RoomsList" SelectionMode="Single"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Width="32"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <!-- 
          Here's where I want to change the Source property 
          depending on whether or not the item matches the 
          TextBox DataContext. 
         --> 
         <Image Source="Images/Check.png" /> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
      <GridViewColumn Header="Room Name" Width="150" HeaderContainerStyle="{StaticResource textHeaderStyle}" 
       DisplayMemberBinding="{Binding Path=RoomName}" /> 
     </GridView> 
    </ListView.View> 
</ListView> 

Je suis un peu coincé sur celui-ci. Des idées sur la façon d'aborder cela?

Répondre

1

Vous pouvez écrire un MultiValueConverter qui retourne la visibilité et prend DataContext comme première valeur de convertisseur et l'objet spécifique 'Room' comme deuxième valeur (utilisez la liaison ElementName avec Element comme 'Room') Si les valeurs correspondent le contrôle Image ie, imgControl.Visibility se lier au convertisseur

+0

Merci cela m'a conduit à la bonne réponse. +1 –

0

En supposant que votre objet pièce contient l'image ou un lien vers l'image, vous pouvez utiliser la propriété SelectedIndex de ListView et lier au champ image.

<TextBox Name="Room" Text="{Binding ElementName=RoomsList.SelectedItem, Path=Picture}" /> 

Où Roomlist.Image est la photo que vous souhaitez afficher. Si c'est une URL, vous devrez probablement faire ceci est une étiquette d'image contenue dans la zone de texte. Notez que je n'ai pas testé ce code, il faudra peut-être le modifier un peu pour le faire fonctionner.

Questions connexes