質問

だから私はWindows 8.1を使用してVisual Studio 2013のアプリケーションに行ったデスクトッププログラムを移動しようとしています。 Datagridはこのリリースで推奨されていませんので、それらをListViewに翻訳しようとしています。私は以前に他のデスクトップアプリケーションでListViewsを使用しましたが、たくさん変更されたように見えます。私が持っている問題は、私のデータベースからListViewに移入しています。私はWCF Serviceを介してコードをスピンアップしています、私は正しいデータを取得しているのを見ることができます、私はちょうどそれを私のListViewに表示させることはできません。私の優先終了結果は、編集可能な3列の情報を持つ「ListView」です。以前はListView.Viewを使用してから、列のGridViewを列に入れます。しかし、それはListView.Viewのように推奨されていません。

これはGridView.Columns

のマイXAMLです。
<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 serviceGridに命令することができました。

役に立ちましたか?

解決

私が正しく理解していない場合は、UIがViewModelで追加するものではなく値で更新されていませんが、UIに値を追加した場合はViewModelに反映されています。

その場合は、リストの代わりにObserableCollectionを使用し、毎回リストを作成する場合は、ViewModelにInotifyPropertyChangedを実装する必要があります。

これをすべて終了したがそれでも更新されていない場合は、UIスレッドではありません。UI以外のスレッドからUIを更新したい場合は、Dispatcherを使用してUIを更新してください。Dispatcher

を使用して、UI以外のスレッドからUIを更新するための多くの例を見つけることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top