为什么不把数据给我看?WINRT
本文关键字:WINRT 我看 数据 为什么不 | 更新日期: 2023-09-27 18:25:49
我试着做一个简单的练习,但当我测试第一部分(显示人员数据)时,不会在UI中显示任何内容。
我检查了绑定,我想也可以,我在按钮的点击事件中进行了调试,并获得了所有数据,但UI没有显示任何内容。
此处的所有项目: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>
主页
private void Button_Click(object sender, RoutedEventArgs e)
{
DataSourcePersonas.CrearLista();
DataSourcePersonas.CrearGrupo();
gvGroup.UpdateLayout();
}
好吧,现在发生的情况是,您的GridView
正在获取ListaPersonasAgrupada
,然后您正在更改它,但您的GridView
不知道它已经更改。
您需要让ViewModel
告诉GridView
ListaPersonasAgrupada
已经更改。您可以使用INotifyPropertyChanged
执行此操作。或者,如果您使用MvvmLight,则可以使用RaisePropertyChanged。
另一个选项是重新设置GridView的ItemsSource,但这将破坏绑定。