Доступ к Xamarin.Forms внутри ViewModel - PullRequest
0 голосов
/ 26 июня 2018

Я очень новичок в кроссплатформенной разработке в Xamarin.forms.Мой код должен быть хорошо тестируемым модулем, и я создал класс ViewModel для связи между моим View и Model.Я хочу знать, если мы собираемся получить доступ к Xamarin.forms (используя Xamarin.Forms;) внутри viewmodel, это плохая практика или нарушение концепции MVVM.Если да, то как мы можем использовать Command внутри ViewModel для привязки к представлению.

Спасибо

Ответы [ 2 ]

0 голосов
/ 20 июля 2018

Используйте приведенный ниже код, поэтому вам не нужно импортировать Xamarin.Forms в вашу ViewModel:

ButtonBehavior

 public class ButtonBehavior : Behavior<Button>
    {
        protected override void OnAttachedTo(Button bindable)
        {
            base.OnAttachedTo(bindable);
            bindable.Clicked += Bindable_Clicked;
        }

        private void Bindable_Clicked(object sender, EventArgs e)
        {
            //Use you logic here
        }

        protected override void OnDetachingFrom(Button bindable)
        {
            base.OnDetachingFrom(bindable);
            bindable.Clicked -= Bindable_Clicked;
        }
    }

View

    <Button Text="Click Me" HeightRequest="50" WidthRequest="80">
        <Button.Behaviors>
            <behavior:ButtonBehavior/>
        </Button.Behaviors>
    </Button>
0 голосов
/ 26 июня 2018

Доступ к представлению из модели представления действительно "против" принципа MVVM.Итак, вы правы в этом!Связывание Command не так сложно и работает так же, как и любое другое связывание, которое вы могли бы использовать.

В вашей модели представления просто определите свойство для Command:

public class YourViewModel
{
    public Command YourCommand { get; set; }
}

Затем в конструкторе определите логику, которая должна быть выполнена:

public YourViewModel()
{
    YourCommand = new Command(() =>
    {
        Console.WriteLine("TADA!");
    });
}

Конечно, вы можете определить, что это отдельный метод, или объявить его другим способом.Для краткости я пока что сделал это встроенным.

Чтобы связать его с XAML, просто выполните:

<Button Text="Make it so!" Command="{Binding YourCommand}" />

и убедитесь, что вы установили свойство BindingContext в своемстраница для просмотра модели.Если вы используете инфраструктуру MVVM, возможно, вы уже сделали это.

В какой-то момент вам, вероятно, захочется привязать ячейку в ListView или аналогичном.В этом случае имейте в виду, что объем меняется.Затем вы привязываетесь к модели представления за этой ячейкой, а не к странице.Таким образом, вам нужно будет сделать ссылку на страницу, чтобы достичь этого BindingContext.Но пересеките этот мост, когда попадете туда, просто помните, что в этом есть что-то особенное.

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