说,我想有一个ObservableCollection<SomeModel>
对应于一个水平可滚动按钮列表。我怎样才能做到这一点?
当前,我正在使用以下代码,但问题是它不适合MVVM模型,因为首先它缺乏绑定。
foreach (var item in result.Items)
{
var button = new Button
{
FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Button)),
HeightRequest = 50,
WidthRequest = 80,
Text = item.Id,
};
_itemButtons.Add(button);
var frame = new Frame
{
Content = button,
Padding = new Thickness(0, 0, 0, 10)
};
button.Clicked += OnItemClicked;
Device.BeginInvokeOnMainThread(() => buttonsStack.Children.Add(frame));
}
如果列表应该是垂直的,我肯定会使用ListView,但是既然不行(并且没有“正常”的方法将ListView变成水平,旋转它,然后旋转其中的每个项目都感觉是错误的),我可以没错
我想将几个按钮排成一行(显然我一开始不知道它们的编号),如下所示:
当用户单击按钮时,其余按钮的不透明度被设置为0.3,并且它们的不透明性变得不那么明显,从而产生一种幻觉,即单击按钮是某种选择的选项。
最佳答案
在我看来,仅查看您发布的代码,您所做的一切似乎就很好了,因为您的代码隐藏页面仅与UI元素有关Button
集合的混乱。因此,没有理由将UI元素的集合移至ViewModel。
我建议无论何时要添加按钮,都必须像在Add()
子项上调用buttonStack
一样完成操作,并且要删除Button
时,请获取对它的引用并调用在Remove()
子级上。
另外,如果要水平滚动动作,只需将buttonStack
放在buttonStack
中,然后将ScrollView
设置为ScrollView.Orientation
。
如果我错过了您的问题,一定要告诉我。