【发布时间】:2013-11-16 00:34:46
【问题描述】:
所以我正在尝试使用Visual Studio 2013 将我制作的桌面程序移动到Windows 8.1 的应用程序中。 Datagrid 在此版本中已被弃用,因此我尝试将它们转换为 ListView。我之前在其他桌面应用程序中使用过ListViews,但看起来发生了很多变化。我遇到的问题是从我的数据库中填充我的ListView。我正在通过WCF Service 连接并单步执行代码,我可以看到我得到了正确的数据,但我无法让它出现在我的 ListView 中。我最喜欢的最终结果是包含 3 列可编辑信息的“列表视图”。以前我会使用ListView.View,然后将GridView 放在那里作为列。但似乎 ListView.View 已被弃用,就像 GridView.Columns 一样。
这是我的ListViewxaml
<ListView x:Name="lvInventory" Grid.Row="2" Style="{StaticResource listViewStyle}" ItemsSource="{Binding}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Height="200" Width="200">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="tbName" Text="{Binding InventoryName}" Width="200" Foreground="#FF0E0D0D" />
<TextBox x:Name="tbQty" Grid.Column="1"/>
<TextBox x:Name="tbType" Grid.Column="2"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
在我的代码隐藏中,我正在分配列表视图的 itemssource。
VMInventory inventory = new VMInventory();
inventory.GetList();
lvInventory.ItemsSource = inventory;
VMInventory 是我的ViewModel,我从WCF service 获取数据,看起来像:
public async Task GetList()
{
this.connection = new InventoryModelEntities(new Uri(url));
var filteredList = from o in connection.Inventory
where o.Have == false
select o;
var query = await Task.Factory.FromAsync((filteredList as DataServiceQuery).BeginExecute(null, null),
(result) => (filteredList as DataServiceQuery).EndExecute(result)) as IEnumerable<Aurora.InventoryService.Inventory>;
this.inventoryList = query.ToList();
this.currentItem = 0;
this.onPropertyChanged("Current");
this.IsAtStart = true;
this.IsAtEnd = (inventoryList.Count == 0);
}
最后一点,我能够将一个文本框添加到Grid,当我将DataBind 它添加到text="{Binding Current.InventoryName}" 时,我能够成功绑定它。
【问题讨论】:
标签: wpf listview data-binding windows-store-apps windows-8.1