Как установить горизонтальное значение параметра элемента списка из модели представления в форме xamarin - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть просмотр списка, мне нужно установить значение горизонтальной опции стека размещения, основываясь на условии из viewmodel.so, как установить

частную строку horizontalOption;

    public string HorizontalOption
    {
        get => horizontalOption;
        set
        {
            horizontalOption = value;
            OnPropertyChanged(nameof(HorizontalOption));
        }
    }

public async Task FetchThreadUserData()
    {
     sing (HttpClient hc = new HttpClient())
        {
            try
            {
                IsBusy = true;
                var jsonString = await hc.GetStringAsync(url);
                var obj = JsonConvert.DeserializeObject<MessageList>(jsonString);
                foreach (var user in obj.messages)
                {
                    string authorIdStr = user.authorId;
                    if(authorIdStr==userId)
                    {
                        HorizontalOption = "StartAndExpand";
                    }
                    else if(authorIdStr!=userId)
                    { 
                    HorizontalOption = "EndAndExpand"; 
                    }
                    list.Add(user);
                }
            }
 and binding it like this in Xaml
<StackLayout HorizontalOptions="{Binding HorizontalOption}" >
but it is not working .

Ответы [ 3 ]

1 голос
/ 25 сентября 2019

Вы можете просто использовать DataTriggers для изменения HorizontalOptions на основе некоторого значения свойства ViewModel ...

Обновите ваше свойство, как показано ниже ...

public bool HorizontalOption
{
    get => horizontalOption;
    set
    {
        horizontalOption = value;
        OnPropertyChanged(nameof(HorizontalOption));
    }
}

Теперь обновите свой код Xaml, как показано ниже...

<StackLayout>
//Your UI Elements here
  <StackLayout.Triggers>
     <DataTrigger TargetType="StackLayout" Binding="{Binding HorizontalOption}" 
        Value="True">
        <Setter Property="HorizontalOptions" Value="StartAndExpand"/>
     </DataTrigger>
     <DataTrigger TargetType="StackLayout" Binding="{Binding HorizontalOption}" 
        Value="False">
        <Setter Property="HorizontalOptions" Value="EndAndExpand"/>
     </DataTrigger>
  </StackLayout.Triggers>
</StackLayout>

Примечание: - Внутри вашего метода FetchThreadUserData () обновите значение свойства HorizontalOption до True или False ...

Надеюсь, это поможет

0 голосов
/ 26 сентября 2019

Это не работает, потому что вы связываете строку со свойством, которое принимает LayoutOptions.

public Xamarin.Forms.LayoutOptions HorizontalOption
{
    get => horizontalOption;
    set
    {
        horizontalOption = value;
        OnPropertyChanged(nameof(HorizontalOption));
    }
}
0 голосов
/ 25 сентября 2019

Вы можете использовать CollectionView в формах, если вы хотите, чтобы список прокручивался по горизонтали. CollectionView выпущен после XF 4.0.

<CollectionView ItemsSource="{Binding xxx}">
    <CollectionView.ItemsLayout>
        <ListItemsLayout Orientation="Horizontal" />
    </CollectionView.ItemsLayout>

     <CollectionView.ItemTemplate>
        <DataTemplate>

          //...
        </DataTemplate>
    </CollectionView.ItemTemplate>

</CollectionView>

Don 'не забудьте добавить следующую строку кода в свой класс AppDelegate на iOS или в свой класс MainActivity на Android перед вызовом Forms.Init:

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