8

メインビューに表示される、ViewModel一定量で使用しているアイテムのリストを含むメインがあります。存在間でデータを交換する私の現在の方法は、 mainのそれぞれと、 everyの main の 1 つを参照することです。ただし、これが正しい方法であるかどうかはわかりません。これは、このクラスがこのようなものをサポートするための機能を備えていることを期待しているためです。UserControlsContentControlViewModelsViewModelsViewModelViewModelUserControlViewModelLocator

私がこれをうまくやっているのか、それともMVVM Lightでこれを行うより良い方法があるのか​​ 誰にも教えてもらえますか?

編集:

何か違うものを探していたときにこれを見つけましたが、これはより良い解決策でしょうか?

private ViewModelLocator locator = new ViewModelLocator();

そして、ロケーターのプロパティを使用して各ビューモデルを参照しますか?

EDIT2:

どうやらうまくいくと思っていたのはうまくいきません。最初はメインで参照しかなくViewModel、これでうまくいきましたが、これを試してみるとUserControlsアプリがクラッシュします。私は現在、最初の編集の可能な解決策を試しています。

MainViewModel.cs (その他は同様で、メインの ViewModel のみを参照しています)

public class MainViewModel : ViewModelBase
{
    private ItemAddViewModel itemAddViewModel;
    private ItemsViewModel itemsViewModel;

    /// <summary>
    /// Initializes a new instance of the MainViewModel class.
    /// </summary>
    public MainViewModel()
    {
        ItemsList = Item.GetItemsList();

        itemAddViewModel = ServiceLocator.Current.GetInstance<ItemAddViewModel>();
        itemsViewModel = ServiceLocator.Current.GetInstance<ItemsViewModel>();

        ShowItemsView();
    }
...
    private void ShowItemsView()
    {
        CurrentControl = itemsViewModel;
    }
...
4

3 に答える 3

1

If all you need is to bind a property from the main viewmodel, while inside the content control, just use this syntax:

   ... Binding="{DataContext.mainvmpropertyname, ElementName=xxxx}"

where xxxx is the Name attached to the content control (or any control that has the main viewmodel as its DataContext). Alternatively, you can use relative binding instead of element name.

于 2015-04-04T22:44:34.143 に答える