문제

그래서 제가 만든 데스크톱 프로그램을 앱으로 옮기려고 합니다. Windows 8.1 사용하여 Visual Studio 2013. Datagrid 이번 릴리스에서는 더 이상 사용되지 않으므로 이를 다음 버전으로 번역하려고 합니다. ListView.이전에 사용했던 ListViews 다른 데스크톱 응용 프로그램에서는 많은 것이 변경된 것 같습니다.내가 겪고있는 문제는 ListView 내 데이터베이스에서.나는 다음을 통해 연결하고 있습니다 WCF Service 코드를 단계별로 실행해보면 올바른 데이터를 얻고 있다는 것을 알 수 있지만 ListView에 표시할 수는 없습니다.내가 선호하는 최종 결과는 편집 가능한 3개의 정보 열이 있는 '목록 보기'입니다.이전에는 ListView.View 그런 다음 GridView 거기에 열이 있습니다.그러나 그것은 나타난다 ListView.View 다음과 같이 더 이상 사용되지 않습니다. GridView.Columns.

여기 내 xaml이 있습니다. 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>

내 코드 숨김에서는 목록 보기의 항목 소스를 할당합니다.

        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는 ViewModel에 추가한 값으로 업데이트되지 않지만 UI에 일부 값을 추가하면 ViewModel에 반영됩니다.

이 경우 목록 대신 ObserableCollection을 사용하고, 매번 목록을 생성하는 경우 ViewModel에 INotifyPropertyChanged를 구현해야 합니다.

이 모든 작업을 수행했지만 여전히 업데이트되지 않는 경우 UI 스레드가 아닌 asy Task에서 목록을 생성합니다.Ui가 아닌 스레드에서 UI를 업데이트하려면 Dispatcher를 사용하여 UI 업데이트를 사용하세요.디스패처를 사용하여 UI가 아닌 스레드에서 UI를 업데이트하는 많은 예를 찾을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top