Quantcast
Channel: Xamarin.Forms — Xamarin Community Forums
Viewing all articles
Browse latest Browse all 77050

Expanding a Frame inside a Listview

$
0
0

Hello everyone,

I'm new to the Xamarin scene and I have a problem I haven't been able to Google or work my way out of:

I have a Listview with some - initially - hidden controls. I want the hidden controls to appear when the user selects the listview item. This is easy enough, however if I put a Frame inside my Listview ViewCell, the frame will not expand when the controls appear. I've tried a few different suggestions, but none have worked so far. My code is below.

My question: how do I get a Frame to expand when its contents change?

XAML:

<ContentPage xmlns= <I can't post links yet?>
             xmlns:x=<I can't post links yet?>
             xmlns:local="clr-namespace:MVVMTest"
             x:Class="MVVMTest.MainPage">
    <StackLayout>
        <ListView HasUnevenRows="True" SelectedItem="{Binding SelectedViewItem, Mode=TwoWay}" ItemsSource="{Binding Items}" >
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Frame BackgroundColor="White" BorderColor="Black">
                            <StackLayout>
                                <Label Text="{Binding Name}"></Label>
                                <Entry Text="{Binding Details}" IsVisible="{Binding ShowDetails}"></Entry>
                            </StackLayout>
                        </Frame>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage>

XAML.cs:

namespace MVVMTest
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            BindingContext = new ViewModel()
            {
                Items = new List<ViewModelItem>()
                {
                    new ViewModelItem()
                    {
                        Name = "Test",
                        Details = "details"
                    },
                    new ViewModelItem()
                    {
                        Name = "Test2",
                        Details = "details2"
                    }
                }
            };
            InitializeComponent();
        }
    }
}

View model:

namespace MVVMTest
{
    public class ViewModel : INotifyPropertyChanged
    {
        private ViewModelItem _selectedViewItem;
        private List<ViewModelItem> _items;

        public event PropertyChangedEventHandler PropertyChanged;
        void OnPropertyChanged([CallerMemberName] string propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        public ViewModelItem SelectedViewItem
        {
            get
            {
                return _selectedViewItem;
            }
            set
            {
                _selectedViewItem = value;
                OnPropertyChanged();
                if (value != null)
                {
                    value.ShowDetails = !value.ShowDetails;
                    SelectedViewItem = null;
                }
            }
        }

        public List<ViewModelItem> Items
        {
            get
            {
                return _items;
            }
            set
            {
                _items = value;
                OnPropertyChanged();
            }
        }

        public ViewModel()
        {

        }
    }

    public class ViewModelItem : INotifyPropertyChanged
    {
        private bool _showDetails;
        private string _details;
        private string _name;

        public event PropertyChangedEventHandler PropertyChanged;
        void OnPropertyChanged([CallerMemberName] string propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        public string Name
        {
            get
            {
                return _name;
            }
            set
            {
                _name = value;
                OnPropertyChanged();
            }
        }

        public bool ShowDetails
        {
            get
            {
                return _showDetails;
            }
            set
            {
                _showDetails = value;
                OnPropertyChanged();
            }
        }

        public string Details
        {
            get
            {
                return _details;
            }
            set
            {
                _details = value;
                OnPropertyChanged();
            }
        }
    }
}

Viewing all articles
Browse latest Browse all 77050

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>