我正在使用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然后将其粘贴回来,我会看到我的数据,它没有完全正确显示,但它在那里。但是我建立它的那一刻消失了,并没有回来
答案 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中,它在构造函数中填充了示例数据。