如何在设计时将模拟数据导入listview,并在WPF中运行时获取实际数据

时间:2010-07-31 16:30:06

标签: wpf listview

我正在使用Visual Studio 2008编写WPF应用程序。我是WPF的新手,希望能够在设计时看到我的listview的内容,这样我就可以看到我在xaml中做了什么,但在运行时绑定到我的实际数据。

我的数据是一个简单模型类型对象的可观察集合,它暴露了一些属性,如Id,Title,Description等

在运行时,我需要能够从代码中获取数据源集合,以便我可以动态更改内容

目前我有:

<Window x:Class="EktronDataUI.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:EktronDataUI"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <ObjectDataProvider ObjectType="{x:Type local:SmartFormDefinitionProvider}" x:Key="formsProvider" MethodName="GetMockData" />
    </Window.Resources>
    <Grid>
        <DockPanel>
            <TextBlock DockPanel.Dock="Top">Hello WPF</TextBlock>
            <ListView Name="myListView" ItemsSource="{Binding Source={StaticResource formsProvider}}">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="Id" DisplayMemberBinding="{Binding Id}" />
                        <GridViewColumn Header="Title" DisplayMemberBinding="{Binding Title}" />
                    </GridView>
                </ListView.View>
            </ListView>
        </DockPanel>
    </Grid>
</Window>

它在运行时显示我的模拟数据,但在设计时不显示。列表视图在设计器中只是一个空白矩形,但我确实看到了“Hello WPF”文本

处理此问题的典型方法是什么?

编辑:

这应该在设计时显示我的数据吗?我发现如果我从xaml中剪切listview然后将其粘贴回来,我会看到我的数据,它没有完全正确显示,但它在那里。但是我建立它的那一刻消失了,并没有回来

1 个答案:

答案 0 :(得分:4)

<Window x:Class="EktronDataUI.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:local="clr-namespace:EktronDataUI" 
xmlns:design_vm="clr-namespace:Company.Product.ViewModel.Design"
mc:Ignorable="d" 
Title="Window1" Height="300" Width="300"> 
<Window.Resources> 
    <ObjectDataProvider ObjectType="{x:Type design_vm:MyListViewModel}" x:Key="DesignTime_DataSource" d:IsDataSource="True"/>
</Window.Resources> 
<Grid d:DataContext="{StaticResource DesignTime_DataSource}> 
    <DockPanel> 
        <TextBlock DockPanel.Dock="Top">Hello WPF</TextBlock> 
        <ListView Name="myListView" ItemsSource="{Binding Path=ListItems"> 
            <ListView.View> 
                <GridView> 
                    <GridViewColumn Header="Id" DisplayMemberBinding="{Binding Id}" /> 
                    <GridViewColumn Header="Title" DisplayMemberBinding="{Binding Title}" /> 
                </GridView> 
            </ListView.View> 
        </ListView> 
    </DockPanel> 
</Grid> 

提供您正在使用的类的子类作为datacontext,并使用d命名空间将其作为设计时datacontext连接,如我的示例所示。我有MVVM项目,我的viewmodels有一个命名空间,每个类都有一个我用于设计的子类。这些子类具有使用设计时数据填充它们的构造函数。可以在代码隐藏或通过数据窗口设置运行时的datacontext。 viewmodel有一个用于listview项的observablecollection,在design-viewmodel中,它在构造函数中填充了示例数据。