【问题标题】:How to bind a list view in a data template from a view model in WPF如何从 WPF 中的视图模型绑定数据模板中的列表视图
【发布时间】:2017-05-26 10:59:29
【问题描述】:

我制作了一个带有列表视图绑定的应用程序,其中正在处理类库中的数据因此数据模型驻留在类库中。作为扩展,我想使用 AvalonDock 来管理我的窗口。举个例子,他们绑定数据的方式是通过数据模板,数据模板是从视图模型通过数据模板传递的。因此,我删除了他们的文本框并放置了我的列表视图,但我无法再使用列表视图项源从 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;
}

【问题讨论】:

    标签: wpf listview mvvm


    【解决方案1】:

    您可以将ListViewItemsSource 属性绑定到其DataContext 的属性。所以如果DataContext 是一个festViewModel 实例,你可以这样绑定它:

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

    ...假设FestfestViewModel 类的公共属性

    public List<festItem> Fest { get; set; }
    

    您不能绑定到字段。

    【讨论】:

      猜你喜欢
      • 2018-04-19
      • 1970-01-01
      • 2017-02-15
      • 2011-02-20
      • 2013-08-17
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      相关资源
      最近更新 更多