2009-04-14 8 views
0

J'ai un contrôle ListView lié à un ObservableCollection d'éléments, et j'ai défini son affichage sur un GridView avec des colonnes liées aux propriétés Data. Les choses semblent bien se passer, mais les données dans les propriétés de la source ne sont pas rendues du tout. Voici la struct ScanData:Les éléments ListView ne sont pas affichés dans les colonnes GridView

struct ScanData 
{ 
    public ushort Port; 
    public bool? Status; 
    public string ServiceName; 
} 

Le XAML:

<ListView IsSynchronizedWithCurrentItem="True" Width="Auto" Name="_resultsListView" ItemsSource="{Binding}" Height="138"> 
    <ListView.View> 
     <GridView ScrollViewer.IsDeferredScrollingEnabled="True"> 
      <GridViewColumn Header="Port" Width="50" DisplayMemberBinding="{Binding Path=Port}"/> 
      <GridViewColumn Header="Status" DisplayMemberBinding="{Binding Path=Status}"/> 
      <GridViewColumn Header="Service" Width="231" DisplayMemberBinding="{Binding Path=ServiceName}"/> 
    </GridView> 
    </ListView.View> 
</ListView> 

Le CodeBehind (les parties les plus pertinentes, en tout cas):

public partial class AddServerDialog 
{ 
    PortScanner _scanner; 
    ObservableCollection<ScanData> _resultList; 
    Brush _defaultPortTextBorderBrush; 

    public AddServerDialog() 
    { 
     this.InitializeComponent(); 
     _resultList = new ObservableCollection<ScanData>(); 
     _resultsListView.DataContext = _resultList; 
    } 

    // ... 

    private void _addScanButton_Click(object sender, RoutedEventArgs e) 
    { 
     _resultList.Add(_scanner.CreateScan(ushort.Parse(_portText.Text))); 
    } 
} 

Lorsque je clique sur le bouton qui provoque _addScanButton_Click au feu , Je peux voir que les éléments sont ajoutés à ListView (par exemple, les lignes sont sélectionnables), mais les trois colonnes ne montrent rien en eux. Les éléments ScanData du DataContext ont tous leur propriété Port, donc ne devrait-il pas être rendu dans la colonne "Port"? Les deux autres propriétés sont NULL à l'exécution et donc je ne m'attends pas à les voir.

Répondre

3

Les données de ScanData doivent être des propriétés et non des champs.

struct ScanData 
{ 
    public ushort Port {get;set;} 
    public bool? Status{get;set;} 
    public string ServiceName{get;set;} 
} 
Questions connexes