2011-05-18 4 views
2

J'ai un ListView qui a quelques colonnes. Je n'ai aucun problème contraignant chaque GridViewColumn à une propriété, par exemple:Liaison multiple dans une vue de liste

<ListView ItemsSource="{Binding MyList}"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn DisplayMemberBinding="{Binding Name}"> 
       <GridViewColumnHeader Content="Name"/> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

Les problèmes commencent lorsque je tente de MultiBind un GridViewColumn à deux propriétés:

<GridViewColumn> 
    <GridViewColumn.DisplayMemberBinding> 
     <MultiBinding Converter="{StaticResource DisplayMemberConverter}"> 
      <Binding Path="HighestScore"/> 
      <Binding Path="IsHighestScoreApplicable"/> 
     </MultiBinding> 
    </GridViewColumn.DisplayMemberBinding> 
    <GridViewColumnHeader Content"Highest_Score"/> 

Le convertisseur J'utilise est donné ici:

public class DisplayMemberConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    {    
     int int_value = (int)values[0]; 
     bool bool_value = (bool)values[1]; 

     if (bool_value == true) 
      return int_value; 

     return null; 
    } 

    ...  
} 

Je veux obtenir l'effet que lorsque 'IsHighestScoreAp La propriété 'plicable' est fausse - rien n'est affiché sur la liste (vide), et quand c'est vrai - la valeur HighestScore est affichée, mais cela ne marche pas - tout ce que je reçois est une colonne vide même quand '' IsHighestScoreApplicable 'est vrai. De plus, quand je debug méthode Convert() je peux voir que l'instruction if:

if (bool_value == true) 

détient, et la valeur retournée est int_value, mais rien ne montre sur la Liste.

Qu'est-ce qui ne va pas?

All The Best, Dave

Répondre

0

DisplayMemberBinding est, comme son nom l'indique, pas une valeur, mais une liaison qui pointe vers l'élément (propriété) qui devrait être affiché. Vous pouvez utiliser le CellTemplate si vous avez des moyens complexes de récupérer une valeur.

(Pour illustrer l'explication ci-dessus. Votre convertisseur pourrait revenir DisplayMemberBinding="42" qui semble tout à fait hors car il n'y a pas de liaison ou d'un membre à trouver)

0

Juste essayer

if (bool_value == true) 
     return int_value.ToString(); 

Il a travaillé quand j'ai reproduit votre numéro

7

Il y a quelques minutes j'avais besoin de multibinding dans une listview.

Comment je l'ai fait:

J'ai fait une DataTemplate pour la cellule. Le datatemplate contient un bloc de texte, sur ce bloc de texte, nous effectuons des liaisons multiples.

<ListView Margin="33,0,0,0" ItemsSource="{Binding HourRegistry}"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Width="200" Header="Worker" > 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock> 
           <TextBlock.Text> 
            <MultiBinding StringFormat="{}{0} {1}"> 
             <Binding Path="Employee.FirstName" /> 
             <Binding Path="Employee.Name" /> 
            </MultiBinding> 
           </TextBlock.Text> 
          </TextBlock> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Width="100" Header="Job" DisplayMemberBinding="{Binding Path=Keycode}"/> 
      </GridView> 
     </ListView.View> 

Peut-être tard, mais à portée de main pour d'autres personnes

Questions connexes