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