说,我想有一个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变成水平,旋转它,然后旋转其中的每个项目都感觉是错误的),我可以没错

我想将几个按钮排成一行(显然我一开始不知道它们的编号),如下所示:

c# - 如何在Xamarin表单中创建自定义可绑定(bind) View ?-LMLPHP

当用户单击按钮时,其余按钮的不透明度被设置为0.3,并且它们的不透明性变得不那么明显,从而产生一种幻觉,即单击按钮是某种选择的选项。

最佳答案

在我看来,仅查看您发布的代码,您所做的一切似乎就很好了,因为您的代码隐藏页面仅与UI元素有关Button集合的混乱。因此,没有理由将UI元素的集合移至ViewModel。

我建议无论何时要添加按钮,都必须像在Add()子项上调用buttonStack一样完成操作,并且要删除Button时,请获取对它的引用并调用在Remove()子级上。

另外,如果要水平滚动动作,只需将buttonStack放在buttonStack中,然后将ScrollView设置为ScrollView.Orientation

如果我错过了您的问题,一定要告诉我。

10-06 13:28