2016-07-23 19 views
2

私はObservableCollection<SomeModel>を持っていて、水平スクロール可能なボタンのリストに対応したいと思っています。どうやってやるの?Xamarinフォームでカスタムバインド可能なビューを作成する方法は?

現在、私は次のコードを使用していますが、問題は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コントロールを使用することになりますが、以来、それはいけない(と、リストビュー水平を作り、それを回転し、それにすべての項目を回転のない「正常な」方法はありませんちょうど間違っていると感じる)、私はできません。

は、私は次のように(私は明らかに初めに自分の番号がわからない)列に並んだ複数のボタンを持つようにしたい:

enter image description here

すると、ボタンの上のユーザーをクリックすると、残りの部分をボタンの不透明度のうちの3つが0.3に設定されているため、ボタンがクリックされたという錯覚がある種の選択されたオプションになります。

+0

あなたは何を達成しようとしていますか?いくつかの図面のユースケースのように、他にもいくつかの提案をすることができますか? 私の選択では、水平にスクロールすることは、PCについて話しているときでさえ、厄介な経験です。したがって、横スクロールすることは、携帯電話ではさらに悪い経験です(CarouselViewは例外です)。 とにかく、いくつかの水平リストビューがあります(水平スクロールをサポートしているかどうかは分かりません) – BraveHeart

+0

編集を参照してください – nicks

答えて

2

あなたのコードビハインドページがあなたのコレクションButtonに関してだけ混乱しているので、投稿したコードを見るだけで、私の見解では、あなたがやっていることはまったくうまくいくようです。したがって、UI要素のコレクションをViewModelに移動する理由はありません。

私はあなたがボタンを追加したい史上とき、buttonStack子供にAdd()を呼び出すことによって、あなたがやっている正確に好きことを示唆していると、あなたは、Buttonを削除し、それへの参照を取得し、buttonStackRemove()を呼び出したいとき子供。

また、水平スクロールを実行する場合は、buttonStackScrollViewに、ScrollView.OrientationScrollOrientation.Horizontalに設定してください。

あなたの質問のポイントを逃した場合は、間違いなく私に知らせてください。

+0

ViewModelでどのボタンが選択されているかに関する情報はありませんか? – nicks

+1

@NikaGamkrelidzeそれは確かに可能性があります。私はあなたがMVVMの狂信的な人たちとそれほど熱狂的ではない人々の間で議論をしていると思います。私の意見では、ボタンはUI要素であり、実際のデータを表現していないため、アプリで意味が分かればコードビハインドでそれらを保存します。私は単に、選択された 'Button'を格納する' private'クラスレベルの 'Button'変数を持っています。 – hvaughan3

関連する問題