Frage

Ich versuche also, ein Desktop-Programm, für das ich erstellt habe, in eine App zu verschieben Windows 8.1 wobei Visual Studio 2013. Datagrid war für diese Version veraltet, also versuche ich, diese in eine zu übersetzen ListView.Ich habe vorher benutzt ListViews in anderen Desktop-Anwendungen sieht es aber so aus, als hätte sich viel geändert.Das Problem, das ich habe, ist, meine zu bevölkern ListView aus meiner Datenbank.Ich verbinde mich über eine WCF Service wenn ich durch den Code gehe, kann ich sehen, dass ich die richtigen Daten erhalte. Ich kann sie einfach nicht in meiner Listenansicht anzeigen lassen.Mein bevorzugtes Endergebnis wäre eine 'Listenansicht' mit 3 Informationsspalten, die bearbeitet werden können.Früher würde ich verwenden ListView.View und dann ein GridView dort für die Spalten.Aber es scheint ListView.View ist genauso veraltet wie GridView.Columns.

hier ist meine xaml für die 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>

In meinem Codebehind weise ich die itemssource meiner Listenansicht zu.

        VMInventory inventory = new VMInventory();            
        inventory.GetList();
        lvInventory.ItemsSource = inventory;

VMInventory ist mein ViewModel woher bekomme ich meine Daten von der WCF service und das sieht so aus:

 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);
}

Eine letzte Randnotiz, ich konnte dem ein Textfeld hinzufügen Grid und wenn ich DataBind es zu text="{Binding Current.InventoryName}" Ich kann es erfolgreich binden.

War es hilfreich?

Lösung

Wenn ich das richtig verstehe, wird Ihre Benutzeroberfläche nicht mit Werten aktualisiert, was auch immer Sie in ViewModel hinzufügen, aber wenn Sie in der Benutzeroberfläche einen Wert hinzufügen, spiegelt sich dies im ViewModel wider.

Wenn dies der Fall ist, verwenden Sie ObserableCollection anstelle von list , und wenn Sie jedes Mal eine Liste erstellen, müssen Sie INotifyPropertyChanged in Ihrem Ansichtsmodell implementieren.

Wenn Sie dies alles getan haben, es aber immer noch nicht aktualisiert wird, erstellen Sie die Liste in einer Aufgabe, die kein UI-Thread ist.Wenn Sie eine Benutzeroberfläche von einem Nicht-UI-Thread aktualisieren möchten, verwenden Sie update the UI using Dispatcher .Sie finden viele Beispiele zum Aktualisieren der Benutzeroberfläche aus einem Nicht-UI-Thread mithilfe des Dispatchers

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top