如何在WPF中从视图模型绑定数据模板中的列表视图

时间:2017-05-26 10:59:30

标签: wpf listview mvvm

我创建了一个带有列表视图绑定的应用程序,其中数据正在类库中处理,因此数据模型驻留在类库中。作为扩展,我想使用AvalonDock来管理我的窗口。举个例子,它们绑定数据的方式是通过数据模板,它通过视图模型中的数据模板传递。所以我删除了他们的文本框并放入了我的listview,但我无法再使用listview项源从c#代码访问列表视图,因为我已将它放在数据模板中。因此,在构造函数中,在fest视图模型中,我创建了一个列表类型的新实例并分配了值,但没有数据通过视图。我逐步浏览festviewmodel,我在ViewModel中创建的列表中的数据是视图中没有数据。出于好奇,我创建了一个文本块并在构造函数中设置了值,它显示在视图上,但是我从List到Listview的数据是空的。

<localController:PanesTemplateSelector.festViewTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical">
                <ListView x:Name="lvfest"  >
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Width="100" DisplayMemberBinding="{Binding Fest.id}" >
                                <GridViewColumn.Header>
                                    <GridViewColumnHeader Tag="ID" Click="lvfestColumnHeader_Click">ID</GridViewColumnHeader>
                                </GridViewColumn.Header>
                            </GridViewColumn>
                            <GridViewColumn  Width="100" DisplayMemberBinding="{Binding Fest.format}" >
                                <GridViewColumn.Header>
                                    <GridViewColumnHeader Tag="Format" Click="lvfestColumnHeader_Click">Format</GridViewColumnHeader>
                                </GridViewColumn.Header>
                            </GridViewColumn>
                            <GridViewColumn Width="100" DisplayMemberBinding="{Binding Fest.modified}" >
                                <GridViewColumn.Header>
                                    <GridViewColumnHeader Tag="Date" Click="lvfestColumnHeader_Click">Date</GridViewColumnHeader>
                                </GridViewColumn.Header>
                            </GridViewColumn>
                        </GridView>
                    </ListView.View>
                </ListView>
            </StackPanel>
        </DataTemplate>
    </localController:PanesTemplateSelector.festViewTemplate>


public class festViewModel
{
    public festViewModel() : base("fest Stats")
    {
        Workspace.This.ActiveDocumentChanged += new EventHandler(OnActiveDocumentChanged);
        Fest = new List<festItem>();
        Fest = MainWindow._fest.festData.fest_Items;
    }
    public List<festItem> Fest;
}

1 个答案:

答案 0 :(得分:2)

您可以将ItemsSource的{​​{1}}属性绑定到其ListView的属性。因此,如果DataContextDataContext实例,您可以像这样绑定它:

festViewModel

...前提是<ListView x:Name="lvfest" ItemsSource="{Binding Fest}"> ... Fest类的公开属性

festViewModel

您无法绑定到字段。