因此,我正在尝试使用Visual Studio 2013
将我制作的桌面程序移动到Windows 8.1
的应用程序。 Datagrid
已被弃用,因此我试图将这些转换为ListView
。我以前在其他桌面应用程序中使用过ListViews
,但看起来好像有很多变化。我遇到的问题是从我的数据库填充我的ListView
。我通过WCF Service
连接并逐步完成代码,我可以看到我正在获取正确的数据,但我不能让它出现在我的ListView中。我的首选最终结果将是一个包含3列信息的“listview”,这些信息将是可编辑的。以前我会使用ListView.View
,然后在那里放置一个GridView
用于列。但似乎ListView.View
已被废弃,就像GridView.Columns
一样。列表视图数据绑定为Windows 8.1商店应用程序
,这里是我的ListView
<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>
在我隐藏我指定我的ListView的XAML的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}"
我能够成功地绑定它。
UI没有得到更新,如果我对UI进行了更改,它不会反映在视图模型中。视图模型填充得很好,它只是不会在UI中显示。我试着将它改为可观察的集合。 re:异步任务,当使用“Current.InventoryName”绑定将其绑定到文本框时,它将数据绑定和显示数据。但我不能使用LV的电流,因为我需要所有这些,而不仅仅是一个。 –
@Kumareshan是正确的,ObservableCollection是答案。如果您想从任务(不在UI线程上运行)更新它,则需要查看CoreDispatcher,否则您将收到编组错误。 –
好的,我将调整我的var查询以返回ObservableCollection而不是IEnumerable。一旦我这样做,那么我的数据绑定将以他们的方式工作?当我可以直接访问数据库时,这在WPF中更容易。 –