此绑定中的目标调用异常(Xamarin)

时间:2018-05-16 07:56:52

标签: c# xamarin xamarin.forms binding cross-platform

大家好,我需要帮助解决这个问题。我绑定了一个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;
        }
}

我不知道我能做什么,我试图一个接一个地退出所有绑定但不起作用,我改变了绑定名称,但也没有用。 谢谢你的帮助。

0 个答案:

没有答案