0

そのため、かなりの量のリアルタイムデータ(.1秒ごとに変更)を収集して配布するプライマリMainViewModelがあります。現在、すべてのコントロールがMainViewModelを参照しています。

UserControlコントロールを使用して、同じタイプのデジタルゲージの多くのオブジェクトを複製しています。

私の質問は、MainViewModelからControlViewModelにデータを「プッシュ」または「参照」するためのベストプラクティスはありますか?私が念頭に置いている目的は、必要なDependencyPropertiesをControlViewModelにきれいに収納し、MainViewModelをできるだけきれいに整理することです。

MVVMLightメッセージングは​​オプションですか?イベントは適切ですか?ControlViewModelからMainViewModelへのバインディングを設定して、MainViewModelデータが更新されたときに、それがControlViewModelに反映されるようにすることはできますか?

4

1 に答える 1

2

ControlViewModel私が質問を正しく理解しているなら、あなたはあなたの中にsのコレクションを公開するプロパティを作成したいかもしれないと思いますMainViewModel

public class MainViewModel : INotifyPropertyChanged
{
    public IEnumerable<ControlViewModel> Controls { get; private set; }
}

ControlViewModelこれは、コンストラクター内の必要なすべてのオブジェクトで設定できます。ゲージを追加または削除する可能性がある場合は、に変更IEnumerableしてObservableCollectionください。

次に、ゲージには、とを使用しItemsControlますItemsSource="{Binding Controls}"DataContextこれにより、各アイテムのが自動的に1つになりますControlViewModel

ゲージコントロールを使用してアイテムをレンダリングするItemTemplateには、ItemsControl:にを設定します。

<ItemsControl.ItemTemplate>
    <DataTemplate DataType="{x:Type YourNamespace:ControlViewModel}">
        <YourNamespace:DigitalGauge />
    </DataTemplate>
</ItemsControl.ItemTemplate>
于 2012-09-28T14:36:24.780 に答える