2016-09-29 11 views
0

XAMLを使用して次の要件を実装するにはどうすればよいですか?WPF - ObservableCollectionの1つの交互項目を表示する

要件

では、それが次の要件を発表「ティッカー」を表示するにGUIを開発したいと思います:

  • のviewmodelは発表のリストが含まれています。
  • 一度に1つのアナウンスのみを表示する必要があります。
  • n秒の後にアナウンステキストを次のものに置き換えてください。
  • 最後にサイクルが最初の項目から再び開始されます。
  • テキスト自体が連続的に移動(スクロール)したり、アニメーション化されたりしてはいけません。
  • 次のアナウンスに切り替えるとき、わずかなアニメーションでトランジションを視覚化するのが理想的です。

簡体ViewModelに

class Announcement 
{ 
    public string Title { get; set; } 
} 

class HomeViewModel 
{ 
    public ObservableCollection<Announcement> Announcements {get;} 
} 

考慮オプション1:

  • のViewModelで別のプロパティを追加するには、次のViewModelにハード

    は、私は、次の実装オプションを検討し私は、このプロパティは、冗長考慮し、既存のコレクションを再利用し、これがあるとして、XAMLで直接遷移を定義したいと思いますしかし、このプロパティ

に直接のTextBlockをバインドタイマー

  • 経由で定期的に更新0
  • 指定されたViewに固有のしかし、私はXAMLを使ってこれを構築する方法についてのリソースを見つけることができませんでした。私がネット上で見つけたティッカーコンポーネントは、通常、何らかのマーキーテキストや連続スクロールを使用していました。

  • +1

    *ビュー*モデルと呼ばれる理由について考えてみましょう。 – Clemens

    +0

    公平な点ですので、最初のアプローチには、viewModelの新しいPropertyを追加して更新することをお勧めします。この場合、OnPropertyChangedイベントによってトリガされたXamlでアニメーションをどのように実装できますか? – rstdev

    +1

    Binding.TargetUpdatedイベントでEventTriggerを使用できます。 –

    答えて

    1

    あなたの「考慮されたオプション1」は適切な方法です。 ViewModelが冗長であることは間違いありません。参照を使って作業しているので、「冗長」に保存しているのはわずか32/64ビットです。

    もう1つの選択肢は、あなたが現在いるポジションに何らかのカウンターを置くことです。しかし、Announcements.ElementAt(counter)を返すもう一つのget-propertyも必要となり、ViewをViewModelにバインドすることができます。それは本当にunnessesaryです。

    オプション1を使用する必要があります。

    関連する問題