UWP передает дополнительный параметр методу из XAML - PullRequest
0 голосов
/ 07 мая 2020

У меня есть StackPanel, и когда он загружается, я хочу программно поместить в него текстовые поля. При вызове функции необходимо передать количество текстовых полей.

XAML

<StackPanel x:Name="RFC" Orientation="Horizontal" Loaded="{x:Bind m:Formas.CrearCuadrosForma}"/>

Я пытаюсь сделать это так:

CS

public static void CrearCuadrosForma(object sender, RoutedEventArgs e, int cantidad)
{
    //TODO
}

Но когда я помещаю параметр в код XAML, например,

Loaded="{x:Bind m:Formas.CrearCuadrosForma(13)}"

, я получаю сообщение об ошибке: «Не удается найти перегрузку функции, которая принимает 1 параметр ", и я не могу найти способ отправить" отправитель объекта "и" RoutedEventArgs e "в качестве параметров или другой способ отправить" int cantidad "функции ...

Есть мысли ?

Ура!

1 Ответ

1 голос
/ 07 мая 2020

Я получаю сообщение об ошибке: «Не удается найти перегрузку функции, которая принимает 1 параметр», и я не могу найти способ отправить «отправитель объекта» и «RoutedEventArgs e» в качестве параметров или другой способ отправить "int cantidad" в функцию

Это не подходит для перенаправления события Loaded для указания метода c с x:Bind. Для вашего сценария лучший способ - использовать XamlBehaviors для обнаружения события Loaded, а затем вызвать определенную команду c с параметром.

Например:

<Grid>
    <Grid.Resources>
        <x:Int32 x:Key="Parameter">15</x:Int32>
    </Grid.Resources>
    <interactivity:Interaction.Behaviors>
        <Interactions:EventTriggerBehavior EventName="Loaded">
            <Interactions:InvokeCommandAction Command="{x:Bind LoadedCommand}" CommandParameter="{StaticResource Parameter}" />
        </Interactions:EventTriggerBehavior>
    </interactivity:Interaction.Behaviors>
</Grid>

код позади

public class CommadEventHandler<T> : ICommand
{
    public event EventHandler CanExecuteChanged;

    public Action<T> action;
    public bool CanExecute(object parameter)
    {
        return true;
    }

    public void Execute(object parameter)
    {
        this.action((T)parameter);
    }
    public CommadEventHandler(Action<T> action)
    {
        this.action = action;

    }
}
public ICommand LoadedCommand
{
    get
    {
        return new CommadEventHandler<int>((s) => LoadedCommandFun(s));
    }
}
private void LoadedCommandFun(int s)
{

}
...