Как я могу манипулировать View (XAML) из моей ViewModel?(Xamarin Forms) - PullRequest
0 голосов
/ 18 декабря 2018

как я могу манипулировать представлением (XAML) из моей ViewModel?

Например, у меня есть подробный вид для объекта.В представлении есть сетка.В зависимости от объекта сетка должна иметь различное количество строк и столбцов.Количество столбцов и строк задается в деталях объекта.Можно ли сделать это из ViewModel или мне нужно сделать это в View .cs?

Я открываю подробный вид из ListView (OnItemSelect):

await Navigation.PushAsync(new AlgoDetailPage(new AlgoDetailViewModel(algo)));

AlgoDetailPage -Здесь я хочу добавить столбцы и строки в зависимости от объекта.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="NotsanHessen.Views.AlgoDetailPage"
             Title="{Binding Algo.Title}">
    <StackLayout>
        <Grid>

        </Grid>
    </StackLayout>
</ContentPage>

AlgoDetailPage.cs:

    public partial class AlgoDetailPage : ContentPage
    {
        AlgoDetailViewModel viewModel;

        public AlgoDetailPage(AlgoDetailViewModel viewModel)
        {
            InitializeComponent();
            BindingContext = this.viewModel = viewModel;
        }

        public AlgoDetailPage()
        {
            InitializeComponent();
            BindingContext = viewModel;
        }
    }

ViewModel:

public class AlgoDetailViewModel : BaseViewModel
{
    public Algo Algo { get; set; }

    public AlgoDetailViewModel(Algo algo = null)
    {
        this.Algo = algo;

        // Rows: algo.Rows
        // Cols: algoCols
    }
}

Ответы [ 4 ]

0 голосов
/ 19 декабря 2018

И если вы ДЕЙСТВИТЕЛЬНО обязательно хотите получить доступ к представлению из ViewModel, вы можете связать событие загрузки представления с командой и передать само представление в качестве параметра команды.

0 голосов
/ 19 декабря 2018

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

0 голосов
/ 19 декабря 2018

Если это сложная сетка, имейте два разных представления контента.В вашем xaml, основываясь на условии, показать или скрыть просмотры содержимого.Таким образом, вы можете сохранить код в любое время.

0 голосов
/ 18 декабря 2018

Технически, вам не нужно делать это из самого View.Если вы хотите быть в точности православным, вы можете создать собственный элемент управления, который будет обрабатывать привязку для вас.Лично я не рекомендовал бы этот уровень следования некоторой теории, но если вы хотите, это возможно.

Кроме этого, вы можете попытаться взглянуть на CollectionView, который появится в Xamarin 4.0, он может быть близокк тому, что вы запросили (вы не указали, как именно должна обрабатываться ширина столбца).Также могут быть некоторые сторонние компоненты, которые могут справиться с этим.

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