如何在Xamarin Forms中创建自定义可绑定视图?

时间:2016-07-23 17:57:05

标签: c# .net xamarin xamarin.forms

说,我想要一个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,但因为它不应该(并且没有&#34;正常&#34;使ListView水平,旋转它然后旋转每个其中的项目感觉错了),我不能。

我希望连续排列几个按钮(我显然不知道他们的编号在开头),如下所示:

enter image description here

当用户点击按钮时,其余的按钮会被按下。不透明度设置为0.3并且它们变得不那么明显,因此产生了点击按钮是某种选定选项的错觉。

1 个答案:

答案 0 :(得分:2)

只看到你发布的代码,在我看来,你正在做的事情看起来非常好,因为你的代码隐藏页面只是弄乱了关于你的Button集合的UI元素。因此没有理由将UI元素集合移动到ViewModel。

我建议您在想要添加按钮的时候,通过致电Add()孩子上的buttonStack以及当您想删除Button时,完全按照自己的意愿行事,得到它的引用并致电Remove()孩子的buttonStack

此外,如果您想要横向滚动操作,只需将buttonStack放在ScrollView中,然后将ScrollView.Orientation设置为ScrollOrientation.Horizontal

如果我错过了你的问题,请务必告诉我。