Pergunta

Então eu estou tentando mover um programa de desktop que eu fiz para um aplicativo Windows 8.1 usando Visual Studio 2013. Datagrid foi preterido para esta versão, então eu estou tentando traduzir aqueles com mais de um ListView.Eu usei anteriormente ListViews em outras aplicações de ambiente de trabalho, mas parece que muita coisa mudou.O problema que eu estou tendo é preencher o meu ListView a partir do meu banco de dados.Eu estou a ligar através de um WCF Service e percorrendo o código, eu posso ver, eu estou ficando os dados certos, eu simplesmente não consigo começar a aparecer em minha Lista.O meu preferido resultado final seria um "listview" com 3 colunas de informações que serão editáveis.Anteriormente, eu usaria ListView.View e, em seguida, colocar um GridView lá para as colunas.Mas parece ListView.View é preterido assim como GridView.Columns.

aqui é o meu xaml para o 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>

Na minha code-behind eu estou atribuindo itemssource do meu listview.

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

VMInventory é o meu ViewModel onde eu estou começando a minha dados do WCF service e que se parece com:

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

Uma última nota lateral, eu era capaz de adicionar uma caixa de texto para o Grid e quando eu DataBind que ele text="{Binding Current.InventoryName}" Eu sou capaz de conseguir religá-lo.

Foi útil?

Solução

Se eu entendi corretamente a sua INTERFACE de utilizador não é ficar atualizada com os valores que sempre adicionar no ViewModel, mas se você adicionar algum valor na INTERFACE do usuário ele está refletindo em ViewModel.

Se for esse o caso, o uso ObserableCollection em vez da lista, e se a sua criação de lista de cada vez, então você tem que implementa INotifyPropertyChanged em seu ViewModel.

Se você tiver feito tudo isso, mas ainda não é a atualização em seguida, o de criar a lista de fácil Tarefa, que não é um thread de INTERFACE de utilizador.Se você deseja atualizar a INTERFACE do usuário a partir de um thread de Interface de utilizador e, em seguida, usar a atualização da INTERFACE do usuário usando o Dispatcher.Você pode encontrar muitos exemplos para atualizar a INTERFACE do usuário do não-thread da INTERFACE do usuário usando o dispatcher

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top