Xamarin MVVM передать свойства объекта - PullRequest
1 голос
/ 05 августа 2020

Так что я новичок в MVVM. Я хорошо понимаю основы этого. У меня есть пример, который работает, просто найти как есть, но я пытаюсь изменить его в стиле MVVM. Я просто пробую разные примеры, чтобы научиться.

(LoginPage.xaml)

На стороне XAML у меня есть метка с жестом касания. довольно один

<!--  Existing Tab  -->
            <Label x:Name="labelName"
                   Grid.Column="0"
                   Style="{StaticResource CenteredTextTitle}"
                   Text="Log In">
                <Label.GestureRecognizers>
                    <TapGestureRecognizer Tapped="SelectorOption_Tapped" />
                </Label.GestureRecognizers>
            </Label>

Страница LoginPage.xaml.cs

Я могу получить к ней доступ, создав задействованную функцию.

private async void SelectorOption_Tapped(object sender, EventArgs e)
        {
            if (!(sender is Xamarin.Forms.View view)) return;

            int index = Grid.GetColumn(view);

           ...
        }

Теперь я пытаюсь изменить это на MVVM .. Таким образом, XAML остается неизменным

на странице ViewModel loginpageviewmodel.cs page

public LoginPageViewModel()
    {
        btnSubmit_Clicked = new Command(SubmitClicked);
    }

    public ICommand btnSubmit_Clicked { get; set; }

    private void SubmitClicked(object parameter)
    {
        if (!(parameter is Xamarin.Forms.View view)) return;

        var index = Grid.GetColumn(view);
     }

Я могу запустить функцию submitclicked. Но я не могу передать параметр. Его всегда ноль. Я хочу получить столбец из сетки, которая у меня есть, в зависимости от того, что выбирает пользователь. он отлично работает в исходном виде, но если я попытаюсь изменить его на MVVM, я не смогу передать форму представления, чтобы получить столбец get .. в любом случае я могу передать это .?

1 Ответ

0 голосов
/ 05 августа 2020

Параметр берется из CommandParameter, который вы установили в xaml:

<StackLayout>
    <!-- Place new controls here -->
    <Label x:Name="myLabel" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" Text="Log In">
        <Label.GestureRecognizers>
            <TapGestureRecognizer Command="{Binding btnSubmit_Clicked}" CommandParameter="{x:Reference myLabel}"/>
        </Label.GestureRecognizers>
    </Label>
</StackLayout>

В коде позади:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();

        BindingContext = new LoginPageViewModel();
    }
}

public class LoginPageViewModel
{

    public LoginPageViewModel()
    {
        btnSubmit_Clicked = new Command(SubmitClicked);
    }

    public ICommand btnSubmit_Clicked { get; set; }

    private void SubmitClicked(object parameter)
    {
        if (!(parameter is Xamarin.Forms.View view)) return;

        Console.WriteLine(parameter);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...