2016-10-09 7 views
0

私は、MainWindowViewModel.csクラスにDataContextを設定したMainWindowを持っています。 MainWindow内には2つのユーザーコントロールがあり、それぞれのユーザーコントロールは対応するViewModelにバインドされています(例:UserControl1ViewModel.csとUserControl2ViewModel.cs)。MainWindowViewModelユーザーコントロールのViewModelインスタンスへの参照

User`s Control ViewModelへの参照をMainWindowViewModel.csから取得して、データを操作できるようにするにはどうすればよいですか?

答えて

2

1つの基本的なアプローチは、あなたが親 例のDataContextの下に

<StackPanel> 
     <TextBox Text="{Binding Text}"/> 
     <uc:UC1 DataContext="{Binding Uc1Vm}"/> 
     <uc:UC2 DataContext="{Binding Uc2Vm}"/> 
    </StackPanel> 

がメインのviewmodel

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = new MainWindowViewModel() 
     { 
      //Below would be replaced by an IOC container instatiation in real world(Unity, MEF etc..) 
      Uc1Vm = new UC1ViewModel(), 
      Uc2Vm = new UC2ViewModel() 
     }; 
    } 
} 

でインスタンス化するとき、子ユーザーコントロールのDataContextのをインスタンス化

以下の通りですMainWindowViewModelは、以下のように2つの子ビューモデルで構成することができます。

public UC1ViewModel Uc1Vm { get; set; } 

public UC2ViewModel Uc2Vm { get; set; } 

あなたは子供がこのことができますまたはあなたが任意のクエリを持っている場合は、私に教えてくださいMainWindowViewModel

/// <summary> 
    /// Text is in MainWindowViewModel 
    /// </summary> 
    public string Text 
    { 
     get { return _text;} 
     set 
     { 
      if(value !=_text) 
      { 
       _text = value; 
       //User control1 has Text property in its view model 
       Uc1Vm.Text = _text; 
       //User control2 has Content property in its view model 
       Uc2Vm.Content = _text; 
       if(PropertyChanged != null) 
       { 
        PropertyChanged(this, new PropertyChangedEventArgs("Text")); 
       } 
      } 
     } 
    } 

から例えば以下のように制御し操作することができます。

+0

したがって、コントロールへの参照を取得する方法は、それらをMainViewModel.csでインスタンス化することです。 MainWindowVM.csからコントロールを直接渡したときにそれらを保持する他の方法はありませんか? –

+0

直接渡すことによってあなたが何を意味するかを詳しく説明できますか?サンプルコードを貼り付けると、もっと関連付けることができます –

関連する問題