Windows 8.1ストアアプリのListViewデータバインディング
-
20-12-2019 - |
質問
だから私はWindows 8.1
を使用してVisual Studio 2013
のアプリケーションに行ったデスクトッププログラムを移動しようとしています。 Datagrid
はこのリリースで推奨されていませんので、それらをListView
に翻訳しようとしています。私は以前に他のデスクトップアプリケーションでListViews
を使用しましたが、たくさん変更されたように見えます。私が持っている問題は、私のデータベースからListView
に移入しています。私はWCF Service
を介してコードをスピンアップしています、私は正しいデータを取得しているのを見ることができます、私はちょうどそれを私のListViewに表示させることはできません。私の優先終了結果は、編集可能な3列の情報を持つ「ListView」です。以前はListView.View
を使用してから、列のGridView
を列に入れます。しかし、それはListView.View
のように推奨されていません。
これはGridView.Columns
<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>
.
私のCodeBehindでは、ListViewのItemsSourceを割り当てています。
VMInventory inventory = new VMInventory();
inventory.GetList();
lvInventory.ItemsSource = inventory;
.
ListView
は、VMInventory
からデータを取得していて、そのように見えます。
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);
}
.
最後のサイドノート、ViewModel
にTextBoxを追加し、それをWCF service
にGrid
に命令することができました。
解決
私が正しく理解していない場合は、UIがViewModelで追加するものではなく値で更新されていませんが、UIに値を追加した場合はViewModelに反映されています。
その場合は、リストの代わりにObserableCollectionを使用し、毎回リストを作成する場合は、ViewModelにInotifyPropertyChangedを実装する必要があります。
これをすべて終了したがそれでも更新されていない場合は、UIスレッドではありません。UI以外のスレッドからUIを更新したい場合は、Dispatcherを使用してUIを更新してください。Dispatcher
を使用して、UI以外のスレッドからUIを更新するための多くの例を見つけることができます。