列表视图看不到绑定对象属性



我在显示外部类实例的属性时遇到问题。有ListView标记:

<ListView
x:Name="transportListView"
SelectionMode="None"
ItemsSource="{Binding MyModel}">
<ListView.ItemTemplate>
    <DataTemplate>
        <Border Padding="15" HorizontalAlignment="Center" Margin="0,0,0,10" Background="Gray">
            <StackPanel Margin="0,0,0,0">
                <TextBlock
                Text="{Binding ItemName}"
                Margin="0,0,0,0"/>
                <TextBlock
                Text="{Binding ItemCount}"
                Margin="0,0,0,0"/>
            </StackPanel>
        </Border>
    </DataTemplate>
</ListView.ItemTemplate>

MyModel是页面属性:

...
    public ObservableCollection<ExternalClass> MyModel { get; set; }
...

ExternalClass是一些参考库中的类:

namespace Library.Entities
{
    public class ExternalClass
    {
        public string ItemName { get; set; }
        public int ItemCount { get; set; }
    }
} 

所以当我运行应用程序时,我会看到列表项,因为我设置了灰色,但ItemNameItemCount没有显示,为什么?我正确地将项添加到集合中,并完美地为内部类绑定。

ListViewItemsSource更改为ItemsSource="{Binding}"。像这样:

<ListView x:Name="transportListView" ItemsSource="{Binding}">
  ....

同样在后面的代码中,在InitializeComponent();:下面添加this.DataContext = MyModel;

public Window1()
{
    InitializeComponent();
    this.DataContext = MyModel;
}

要使用ListView,还需要为其定义视图(GridView):

    <ListView ItemsSource="{Binding MyModel}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="140" Header="Name" DisplayMemberBinding="{Binding ItemName}"/>
                    <GridViewColumn Width="140" Header="Count" DisplayMemberBinding="{Binding ItemCount}"  />
                </GridView>
            </ListView.View>
        </ListView>

如果要为每一行定义模板,则可以使用ListBox而不是ListView:

<ListBox ItemsSource="{Binding MyModel}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border Padding="15" HorizontalAlignment="Center" Margin="0,0,0,10" Background="Gray">
                        <StackPanel Margin="0,0,0,0">
                            <TextBlock Text="{Binding ItemName}" Margin="0,0,0,0"/>
                            <TextBlock Text="{Binding ItemCount}" Margin="0,0,0,0"/>
                        </StackPanel>
                    </Border>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

最新更新