2013-08-02 53 views
0

即時嘗試做一個簡單的練習,但是,當我測試的第一部分(顯示人員數據)不要讓我看到任何東西到用戶界面。爲什麼不顯示數據? WINRT

我檢查了綁定,我猜也沒關係,我在按鈕的單擊事件中進行調試並獲取所有數據,但UI沒有顯示任何內容。

這裏所有proyect:Less_300kb或:

public class Persona: BindableBase 
{ 
    private string _nombre; 
    public string Nombre 
    { 
     get { return _nombre; } 
     set { _nombre = value; 
       SetProperty(ref _nombre, value);} 
    } 

    private string _apellido; 
    public string Apellido 
    { 
     get { return _apellido; } 
     set { SetProperty(ref _apellido, value); } 
    } 

    private int _cedula; 
    public int Cedula 
    { 
     get { return _cedula; } 
     set { _cedula = value; 
       SetProperty(ref _cedula, value);} 
    } 

    private string _profesion; 
    public string Profesion 
    { 
     get { return _profesion; } 
     set { SetProperty(ref _profesion, value); } 
    } 
} 

第二類

public class GrupoPersonas 
{ 
    public string Profesion { get; set; } 
    public List<Persona> ListaPersonas { get; set; } 
} 

末級

public class DataSourcePersonas 
{ 
    //public List<Persona> ListaPersonas { get; set; } 
    public ObservableCollection<Persona> ListaPersonas { get; set; } 

    public void CrearLista() 
    { 
     var listaPivote = new ObservableCollection<Persona>() 
      { 
      new Persona(){ Profesion="Ingeniero",Apellido="Ruiz Pacheco",Nombre="Juan Carlos"}, 
      new Persona(){ Profesion="Médico", Apellido="Gonzalez Ramírez",  Nombre="Miguel"}, 
      new Persona(){ Profesion="Analista", Apellido="Ramirez",  Nombre="Angel"}, 
      new Persona(){ Profesion="Enfermero",Apellido="Aldana",  Nombre="Cesar"}, 
      new Persona(){ Profesion="Conductor",Apellido="Echeverry", Nombre="Andres"}, 
      new Persona(){ Profesion="Piloto", Apellido="Coronel",  Nombre="David"}, 
      new Persona(){ Profesion="Capitán", Apellido="Baracaldo",   Nombre="Alejandro"}, 
      new Persona(){ Profesion="Biólogo", Apellido="Palacios",  Nombre="Mauricio"}, 
      new Persona(){ Profesion="Físico", Apellido="Botía",   Nombre="Oscar"}, 
      new Persona(){ Profesion="Astrónomo",Apellido="Heldford",  Nombre="Axwell"} 
      }; 

     Random genCedula = new Random(); 
     var listaFull = from persona in listaPivote 
         from persona2 in listaPivote 
         from persona3 in listaPivote 
         select new Persona() 
         { 
          Cedula = (int)(genCedula.NextDouble() * 999999999), 
          Nombre = persona.Nombre, 
          Apellido = persona2.Apellido, 
          Profesion = persona3.Profesion 
         }; 

     //ListaPersonas = new List<Persona>(listaFull); 
     ListaPersonas = new ObservableCollection<Persona>(listaFull); 
    } 

    public ObservableCollection<GrupoPersonas> ListaPersonasAgrupada { get; set; } 
    public void CrearGrupo() 
    { 
     var lista = from persona in ListaPersonas 
        group persona by persona.Profesion into grupo 
        select new GrupoPersonas() 
        { 
         Profesion = grupo.Key, 
         ListaPersonas = grupo.ToList() 
        }; 
     ListaPersonasAgrupada = new ObservableCollection<GrupoPersonas>(lista); 
    } 

} 

的XAML

<Page.Resources> 
    <data:DataSourcePersonas x:Key="DataSourcePersonas" 
          x:Name="DataSourcePersonas"></data:DataSourcePersonas> 
    <CollectionViewSource x:Key="CvsGruposPersonas" x:Name="CvsGruposPersonas" IsSourceGrouped="True" 
          Source="{Binding Source={StaticResource DataSourcePersonas}, Path=ListaPersonasAgrupada}" 
          ItemsPath="ListaPersonas"></CollectionViewSource> 
</Page.Resources> 


GridView x:Name="gvGroup" ItemsSource="{Binding Source={StaticResource DataSourcePersonas}, Path=ListaPersonas}" 
       Margin="10,113,10,10"> 
     <GridView.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Style="{StaticResource apptile}"> 
        <TextBlock Style="{StaticResource PersonName}"  Text="{Binding Nombre}"/> 
        <TextBlock Style="{StaticResource PersonName}"  Text="{Binding Apellido}"/> 
        <TextBlock Style="{StaticResource PersonCedula}"  Text="{Binding Cedula}"/> 
        <TextBlock Style="{StaticResource PersonProfession}" Text="{Binding Profesion}"/> 
       </StackPanel> 
      </DataTemplate> 
     </GridView.ItemTemplate> 
    </GridView> 

的MainPage

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
     DataSourcePersonas.CrearLista(); 
     DataSourcePersonas.CrearGrupo(); 

     gvGroup.UpdateLayout(); 

} 

回答

1

好了,發生了什麼事是你GridView是獲得ListaPersonasAgrupada,然後你改變它,但你GridView不知道它被改變。

您需要讓您的ViewModel告訴您的GridViewListaPersonasAgrupada已更改。你可以用INotifyPropertyChanged來做到這一點。或者,如果您使用的是MvvmLight,則可以使用RaisePropertyChanged。

另一種選擇是重新設置GridView的ItemsSource,但這會破壞綁定。

+0

是的!你說的沒錯,在我的視圖模型類實現的類繼承BindableBase(實現INotifyPropertyChanged),並ListaPersonas財產我加的SetProperty:'私人的ObservableCollection _ListaPersonas; public ObservableCollection ListaPersonas { get {return _ListaPersonas; } {SetProperty(ref _ListaPersonas,value);} } }'完美的作品! :) Thnks! – Makito