一次只有一个扩展器以xamarin形式展开

一次只有一个扩展器以xamarin形式展开,xamarin,xamarin.forms,xamarin.ios,expandablelistview,Xamarin,Xamarin.forms,Xamarin.ios,Expandablelistview,在我的页面上有一个4扩展器,我想一次编写一个代码,一个扩展器正在扩展,我能为这个场景做些什么请帮助我,为了更多的澄清,我有一个扩展器的添加图像,在这个给定的代码中有一个单扩展器显示,但是这种类型的4扩展器在我的页面上可用,我想一次扩展一个 您可以为IsExpanded属性绑定true或false,以指示扩展器已展开或折叠 我举一个简单的例子供你参考 型号: public class Model : INotifyPropertyChanged { #region fields

在我的页面上有一个4扩展器,我想一次编写一个代码,一个扩展器正在扩展,我能为这个场景做些什么请帮助我,为了更多的澄清,我有一个扩展器的添加图像,在这个给定的代码中有一个单扩展器显示,但是这种类型的4扩展器在我的页面上可用,我想一次扩展一个


您可以为IsExpanded属性绑定true或false,以指示扩展器已展开或折叠

我举一个简单的例子供你参考

型号:

  public class Model : INotifyPropertyChanged
{
    #region fields
    public string _synonyms;
    public string _s;
    public bool _isexpand;
    #endregion
    public string Synonyms
    {
        get { return _synonyms; }
        set { _synonyms = value; OnPropertyChanged("Synonyms"); }
    }
    public string s
    {
        get { return _s; }
        set { _s = value; OnPropertyChanged("s"); }
    }
    public bool ISexpand
    {
        get { return _isexpand; }
        set { _isexpand = value; OnPropertyChanged("ISexpand"); }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }

}
视图模型:

 public class ViewModel1
{
    public ObservableCollection<Model> models { get; set; }
    public ViewModel1()
    {
        CreateCollection();
    }
    public void CreateCollection()
    {
        models = new ObservableCollection<Model>()
        {
            new Model(){ Synonyms="Synonym1", s="A", ISexpand=false},
            new Model(){ Synonyms="Synonym2", s="B",ISexpand=false},
            new Model(){ Synonyms="Synonym3", s="C",ISexpand=false},
            new Model(){ Synonyms="Synonym4", s="D",ISexpand=false},
            new Model(){ Synonyms="Synonym5", s="E",ISexpand=false},
        };
    }

}
输出:


4个扩展器是什么意思?你想做类似于多层次的事情吗?请检查我以前做的链接。我的页面上有4个不同的扩展器,我想一次扩展一个。您能为您的模型和viewmodel提供错误消息吗?我没有任何错误消息,我在这张图像中有一个有问题的“添加一个图像”链接我已经显示了我的输出,在这个输出中有一个3扩展器视图。问题是当我们单击时,这个扩展器正在展开,但我想一次只显示一个打开的扩展器,其他扩展器应该折叠。您需要一个事件处理程序,当一个扩展器打开时,关闭所有其他扩展器。没有自动化的方法可以做到这一点,您需要自己编写代码。
 public class ViewModel1
{
    public ObservableCollection<Model> models { get; set; }
    public ViewModel1()
    {
        CreateCollection();
    }
    public void CreateCollection()
    {
        models = new ObservableCollection<Model>()
        {
            new Model(){ Synonyms="Synonym1", s="A", ISexpand=false},
            new Model(){ Synonyms="Synonym2", s="B",ISexpand=false},
            new Model(){ Synonyms="Synonym3", s="C",ISexpand=false},
            new Model(){ Synonyms="Synonym4", s="D",ISexpand=false},
            new Model(){ Synonyms="Synonym5", s="E",ISexpand=false},
        };
    }

}
 <ContentPage.BindingContext>
    <local:ViewModel1></local:ViewModel1>
</ContentPage.BindingContext>
<ContentPage.Content>
    <StackLayout x:Name="stacklayout"  BindableLayout.ItemsSource="{Binding models}" Orientation="Vertical" VerticalOptions="StartAndExpand" HorizontalOptions="FillAndExpand">
        <BindableLayout.ItemTemplate>
            <DataTemplate>
                <xct:Expander IsExpanded="{Binding ISexpand}"  Tapped="Expander_Tapped" >
                    <xct:Expander.Header>
                        <Label Text="{Binding Synonyms}"></Label>
                    </xct:Expander.Header>
                    <xct:Expander.ContentTemplate>
                        <DataTemplate>                               
                                <Label Text="{Binding s}"></Label>                                
                        </DataTemplate>
                    </xct:Expander.ContentTemplate>
                </xct:Expander>
            </DataTemplate>
        </BindableLayout.ItemTemplate>
    </StackLayout>
</ContentPage.Content>
 public partial class Page10 : ContentPage
{
    ViewModel1 viewModel1=new ViewModel1();
    public Page10()
    {
        InitializeComponent();

    }
    int i = 0;
    private void Expander_Tapped(object sender, EventArgs e)
    {
        var expander = sender as Expander;
        var label = expander.Header as Label;
        var list = viewModel1.models;
        foreach (var item in viewModel1.models)
        {
            if (item.Synonyms == label.Text)
            {
                item.ISexpand = true;
           
           
                if (i >= 1)
                {
                    foreach (var item1 in viewModel1.models.ToList())
                    {
                        if (item1.Synonyms!= label.Text)
                        {
                            item1.ISexpand = false;
                          
                        }
                    }
                    BindableLayout.SetItemsSource(stacklayout, viewModel1.models);
                }
            }
        }
        i++;
    }
}