大家好,我需要帮助解决这个问题。我绑定了一个Tabbed页面,其中包含我创建的2个类,当我启动应用程序时,会失败并显示targetinvocationexception。
这是我的标签页的xaml。
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="DownToledoAPP.Views.InfoPage">
<ContentPage Icon="tablon.png" BackgroundColor="#3A6DC8" x:Name="tablonpage">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ListView x:Name="tablon" Grid.Row="0" SelectedItem="{Binding Noticiaelegida}" ItemsSource="{Binding Noticias}" >
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Label Grid.Row="0" Text="{Binding titulo}" FontSize="Large"/>
<Label Grid.Row="1" Text="{Binding descripcion}" FontSize="Medium"/>
<Grid Grid.Row="2">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Switch Grid.Column="0" Grid.Row="0" IsToggled="{Binding enprogreso}"/>
<Label Grid.Row="0" Grid.Column="1" Text="En progreso"/>
<Label Grid.Column="0" Grid.Row="1" Text="{Binding responsable}"/>
</Grid>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<Button x:Name="newnoticia" BackgroundColor="#FFCA02" Grid.Row="1" FontFamily="Cooper Black" TextColor="White" HorizontalOptions="Center" Text="Abrir nueva actividad"/>
</Grid>
</ContentPage>
<ContentPage Icon="actividades.png" BackgroundColor="#3A6DC8" x:Name="actividadespage">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ListView x:Name="actividades" Grid.Row="0" ItemsSource="{Binding Actividades}" SelectedItem="{Binding Actividadelegida}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Label Grid.Row="0" FontSize="Large" Text="{Binding nombre}"/>
<Label Grid.Row="1" Text="{Binding descripcion}"/>
<Label Grid.Row="2" FontSize="Small" Text="{Binding horario}"/>
<Grid Grid.Row="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Text="{Binding responsable}"/>
<Label Grid.Column="1" Text="{Binding localizacion}"/>
</Grid>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<Button x:Name="newactividad" BackgroundColor="#FFCA02" Grid.Row="1" FontFamily="Cooper Black" TextColor="White" HorizontalOptions="Center" Text="Abrir nueva noticia"/>
</Grid>
</ContentPage>
这是xaml的cs。
public partial class InfoPage : TabbedPage
{
private CWS cws;
private DatosUsuario actualusuario;
public InfoPage (string text)
{
InitializeComponent ();
cws = new CWS();
actualusuario = new DatosUsuario();
actualusuario=cws.DescargarInfousuario(text);
var alltablon= cargartablon();
var actividades = cargaractividades();
image.Source = actualusuario.foto;
name.Text = actualusuario.nombre + " " + actualusuario.apellido1 + " " + actualusuario.apellido2 + " Alias:" + actualusuario.nombreuser;
logout.Clicked += salir;
userinfo.Clicked += change;
newnoticia.Clicked += crearnoticia;
newactividad.Clicked += crearactividad;
tablonpage.BindingContext = new ViewModel.InfoNoticiasModel(alltablon, actualusuario.idusuario, this);
actividadespage.BindingContext = new ViewModel.InfoViewModel(actividades, actualusuario.idusuario, this);
}
private async void crearactividad(object sender, EventArgs e)
{
await Navigation.PushAsync(new DetailPage(null, null, "Actividad", actualusuario.idusuario));
}
private async void crearnoticia(object sender, EventArgs e)
{
await Navigation.PushAsync(new DetailPage(null, null, "Noticia", actualusuario.idusuario));
}
private List<ActividadesMVVM> cargaractividades()
{
var noticias = cws.DescargarActividades(actualusuario.idusuario.ToString(),actualusuario.idrol.ToString());
var listamvvm = new List<ActividadesMVVM>();
for (int i = 0; i < noticias.Count; i++)
{
var actividad = new ActividadesMVVM();
var creador = cws.DescargarNombre(noticias[i].idresponsable.ToString());
actividad.descripcion = noticias[i].descripcion;
actividad.horario = noticias[i].horario;
actividad.nombre = noticias[i].nombre;
actividad.localizacion = noticias[i].localizacion;
actividad.idactiviadad = noticias[i].idactividad;
actividad.idresponsable = noticias[i].idresponsable;
actividad.responsable = "Creador por: " + creador.nombre + " " + creador.apellido1;
listamvvm.Add(actividad);
}
return listamvvm;
}
private List<TablonMVVM> cargartablon()
{
var noticias = cws.DescargarTablon(actualusuario.idusuario.ToString(),actualusuario.idrol.ToString());
var listamvvm = new List<TablonMVVM>();
for(int i = 0; i < noticias.Count; i++)
{
var actividad = new TablonMVVM();
var creador = cws.DescargarNombre(noticias[i].idresponsable.ToString());
actividad.descripcion = noticias[i].descripcion;
actividad.enprogreso = noticias[i].enprogreso;
actividad.titulo = noticias[i].titulo;
actividad.idtablon = noticias[i].idnoticia;
actividad.idresponsable = noticias[i].idresponsable;
actividad.responsable = "Creador por: "+creador.nombre + " " + creador.apellido1;
listamvvm.Add(actividad);
}
return listamvvm;
}
private async void change(object sender, EventArgs e)
{
await Navigation.PushAsync(new ChangeInformation(actualusuario.nombreuser,actualusuario.idusuario));
Navigation.RemovePage(this);
}
private async void salir(object sender, EventArgs e)
{
var r = await DisplayAlert("Cerrar sesión", "¿Esta seguro de que desea cerrar sesión?", "Si", "No");
if (r)
{
await Navigation.PushAsync(new LoguinPage());
Navigation.RemovePage(this);
}
}
}
这是我绑定2个内容页面的两个分支
class InfoNoticiasModel:BindableObject
{
private int idusuarioactual;
private TabbedPage contextoactual;
private List<TablonMVVM> noticias;
public List<TablonMVVM> Noticias
{
get
{
return noticias;
}
set
{
noticias = value;
OnPropertyChanged();
}
}
private TablonMVVM noticiaelegida;
public TablonMVVM Noticiaelegida
{
get { return noticiaelegida; }
set
{
noticiaelegida = value;
if (idusuarioactual == noticiaelegida.idresponsable)
{
contextoactual.Navigation.PushAsync(new DetailPage(null, noticiaelegida, "No", idusuarioactual));
}
OnPropertyChanged();
}
}
public InfoNoticiasModel(List<TablonMVVM> tablones, int idusuario, TabbedPage contexto)
{
Noticias = tablones;
idusuarioactual = idusuario;
contextoactual = contexto;
}
}
class InfoViewModel:BindableObject
{
private int idusuarioactual;
private TabbedPage contextoactual;
private List<ActividadesMVVM> actividades;
public List<ActividadesMVVM> Actividades
{
get { return actividades; }
set
{
actividades = value;
OnPropertyChanged();
}
}
private ActividadesMVVM actividadelegida;
public ActividadesMVVM Actividadelegida
{
get { return actividadelegida; }
set
{
actividadelegida = value;
if (idusuarioactual == actividadelegida.idresponsable)
{
contextoactual.Navigation.PushAsync(new DetailPage(actividadelegida, null,"No",idusuarioactual));
}
OnPropertyChanged();
}
}
public InfoViewModel(List<ActividadesMVVM> actividadees,int idusuario,TabbedPage contexto){
Actividades = actividadees;
idusuarioactual = idusuario;
contextoactual = contexto;
}
}
我不知道我能做什么,我试图一个接一个地退出所有绑定但不起作用,我改变了绑定名称,但也没有用。 谢谢你的帮助。