ListView项目未在GridView列中呈现

时间:2009-04-14 17:37:14

标签: c# .net wpf listview

我有一个ListView控件绑定到项目的ObservableCollection,我将它的视图设置为GridView,其中列绑定到属性Data。事情似乎没问题,但源属性中的数据根本没有呈现。这是ScanData结构:

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

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>

代码隐藏(最相关的部分,无论如何):

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)));
    }
}

当我单击导致_addScanButton_Click触发的按钮时,我可以看到项目被添加到他渲染的ListView中(例如,行是可选择的),但三列中没有显示任何内容。 DataContext中的ScanData项都设置了Port属性,所以不应该在“Port”列中呈现数字吗?其他两个属性在运行时为null,因此我不希望看到它们。

1 个答案:

答案 0 :(得分:3)

ScanData上的数据必须是属性,而不是字段。

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