Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Xamarin表单中创建自定义可绑定视图?_C#_.net_Xamarin_Xamarin.forms - Fatal编程技术网

C# 如何在Xamarin表单中创建自定义可绑定视图?

C# 如何在Xamarin表单中创建自定义可绑定视图?,c#,.net,xamarin,xamarin.forms,C#,.net,Xamarin,Xamarin.forms,比如说,我想要一个可观察集合,它将对应一个水平滚动的按钮列表。我该怎么做 目前,我正在使用以下代码,但问题是它不适合MVVM模型,因为首先,它缺少绑定 foreach (var item in result.Items) { var button = new Button { FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Button)), HeightRequest = 50,

比如说,我想要一个
可观察集合
,它将对应一个水平滚动的按钮列表。我该怎么做

目前,我正在使用以下代码,但问题是它不适合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元素。因此,没有理由将UI元素的集合移动到ViewModel

我建议,当您想要添加按钮时,完全按照您在
buttonStack
子项上调用
add()
的方式进行操作,当您想要删除
按钮时,获取对该按钮的引用,并在
buttonStack
子项上调用
remove()

另外,如果您想进行水平滚动操作,只需将
按钮置于
滚动视图中,然后将
滚动视图.Orientation
设置为
滚动方向.horizontal


如果我没有抓住你问题的重点,一定要让我知道。

我们可以知道你想达到什么目的吗?比如有一些图纸的用例,那么我们可以给你一些其他的建议吗?在我的optionion中,水平滚动是一种令人敬畏的体验,即使在我们谈论PC时也是如此。因此,在手机中进行水平滚动是更糟糕的体验(CarouselView除外)。无论如何,有一些水平列表视图(不知道它们是否支持水平滚动)请查看编辑是否在ViewModel中显示关于选择哪个按钮的信息?@NikaGamkrelidze当然可以。我认为你们正在围绕MVVM狂热者和对MVVM不那么狂热的人展开辩论。在我看来,由于按钮是UI元素,不代表实际数据,如果在我的应用程序中有意义的话,我会将它们存储在代码后面。我只需要一个
private
class-level
按钮
变量来存储所选的
按钮