简体   繁体   中英

Xamarin.Forms IsVisible not working on Android after selected item

I have problem with IsVisible. I want that after select item in ListView StackLayout shows up with label but item selected not works. Of course i have rest of code. IsVisible = false its working so i have only problem with show info. I Have tried almsot everything changing code but not works fine.

public new string Title { get; set; }
public string Info { get; set; }
public int Timer { get; set; }

private bool _isVisible = false;
public new bool IsVisible
{
  get => _isVisible;
  set => Set(ref _isVisible, value);
}

  private void Set(ref bool _isVisible, bool value)
  {
     return;
  }

private void DO ()
{
  Task.Factory.StartNew(() =>
{
   ChallengeList.ItemsSource = new List<MainPage>
 {
     new MainPage {Title = "Cuipka", Info="Cipka"},
     new MainPage {Title = "Cuipka", Info="Cipka"},
     new MainPage {Title = "Cuipka", Info="Cipka"},
     new MainPage {Title = "Cuipka", Info="Cipka"},
   };
  });
 }


private void ChallengeList_ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
    //    if (e.SelectedItem == null)
    //        return;
  if (e.SelectedItem is MainPage viewModel)
  {
          viewModel.IsVisible = true;
  }
           //    ChallengeList.SelectedItem = null;
} 

XAML:

<ListView x:Name="ChallengeList" SeparatorColor="#3d122c" HasUnevenRows="True"
            ItemSelected="ChallengeList_ItemSelected"  RelativeLayout.YConstraint="{ConstraintExpression ElementName=Lab, Constant=0,Factor=1,Property=Height,Type=RelativeToView}"
      RelativeLayout.HeightConstraint="{ConstraintExpression Property=Height,Factor=0.8,Type=RelativeToParent}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Orientation="Horizontal"  BackgroundColor="#40FFFFFF" Padding="10">
                            <StackLayout HorizontalOptions="CenterAndExpand">
                                <Label Text="{Binding Title}" TextColor="#ff3f50" FontSize="17" FontAttributes="Bold" HorizontalOptions="Center"/>
                                <StackLayout HorizontalOptions="CenterAndExpand" IsVisible="{Binding IsVisible}" x:Name="More" Padding="5">
                                    <Label Text="sdfghjkhgfdsfghjkljhgfdsadfghjkljhgfdsaSDFGHJKJHGFDSAsdfghjkhgfds" TextColor="#ff3f50" FontSize="17" FontAttributes="Bold" HorizontalOptions="Center"
                                           LineBreakMode="WordWrap"/>
                                </StackLayout>
                            </StackLayout>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
</ListView>

I'm not quite sure what you are doing with the Set function, but I would normally set up properties in my viewmodel like this:

    private bool _isVisible;
    public bool IsVisible
    {
        get { return _isVisible; }
        set { _isVisible = value; OnPropertyChanged(nameof(IsVisible)); }
    }
    private bool _isVisible = false;

    public bool IsVisible
    {
        get
        {
            return _isVisible
        }
        set
        {
            Set(() => IsVisible, ref _isVisible, value);
        }
    }

This worked for me !

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM