如何在Xamarin Forms中创建自定义可绑定视图?
问题描述:
说,我想有一个ObservableCollection<SomeModel>
对应的水平滚动按钮列表。我怎样才能做到这一点?如何在Xamarin Forms中创建自定义可绑定视图?
目前,我正在使用下面的代码,但问题是它不适合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,并且它们变得不太明显,从而产生错觉,即单击的按钮是某种选定的选项。
答
只看到您发布的代码,在我看来,您所做的事似乎完全没问题,因为您的代码隐藏页面仅针对您收集的Button
s的UI元素进行了混淆。所以没有理由将UI元素的集合移动到ViewModel。
我建议,当过您要添加一个按钮,做的一样,你正在做的通过调用buttonStack
儿童Add()
,当你想删除一个Button
,得到一个参考吧和对buttonStack
调用Remove()
儿童。
此外,如果您想要水平滚动操作,请将您的buttonStack
设置为ScrollView
并将ScrollView.Orientation
设置为ScrollOrientation.Horizontal
。
如果我错过了你的问题的重点,绝对让我知道。
我们可以知道你想要达到什么目的吗?像使用一些图纸的用例,所以也许我们可以给你一些其他的建议? 在我的选择中,即使在我们谈论PC时,水平滚动也是一种令人厌恶的体验。因此,横向滚动在电话中的体验甚至更糟(CarouselView除外)。 无论如何,有一些水平的列表视图(不知道他们是否支持水平滚动) – BraveHeart
请参阅编辑 – nicks