ListView ItemsSource绑定

时间:2016-02-18 09:42:57

标签: c# wpf xaml mvvm

我有一个包含3列的ListView:

<ListView ItemsSource="{Binding ParamName}" HorizontalAlignment="Left" Height="109" Margin="10,87,0,0" VerticalAlignment="Top" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Width="281">
    <ListView.View>
        <GridView>
            <GridView.ColumnHeaderContainerStyle>
                <Style TargetType="{x:Type GridViewColumnHeader}">
                    <Setter Property="IsEnabled" Value="False"/>
                    <Style.Triggers>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="TextElement.Foreground" Value="Black"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </GridView.ColumnHeaderContainerStyle>
            <GridViewColumn Header="Name" Width="60"/>
            <GridViewColumn Header="Type" Width="60"/>
            <GridViewColumn Header="Content" Width="156"/>
        </GridView>
    </ListView.View>
</ListView>

目前,我已将ParamName设置为我的ItemsSource,这显然无法以这种方式达到预期效果。

在我的ViewModel中,每个列都有ObservableCollections(名称为ParamName,Type为ParamType,内容为ParamContent。那些ObservableCollections已正确填充,我可以通过Binding接收数据,但我无法用各自的数据填充列。

我已经想到了某些可能的解决方案,但它们似乎都没有用。这个问题的最佳方法是什么?

这是它的样子(左)以及它应该如何(右):

How it is How it should be

在他们的类型之后命名它们可能会有点混乱。

1 个答案:

答案 0 :(得分:2)

您有三个集合,但只有一个是绑定的。所以所有列都具有相同的值。 尝试创建一个包含所有需要的集合:

ObservableCollection<MyRow>

其中MyRow是具有您需要的属性的类或结构。

如果您已经拥有这些集合 - 尝试将其连接到一个主要集合并告诉GridColumns您希望绑定到每个列的属性,但我不确定它是否可以使用ObservableCollections - 如果他们有不同的长度怎么办?

你仍然可以从这三个中创建自己的Collection - 只需解析它......