2012-07-09 48 views
1

我正在構建我的第一個Caliburn WPF應用程序,並且發現我自己遇到以下問題。Caliburn.Micro:用戶控件之間的通信

我有一個父視圖,加載兩個用戶控件:搜索&結果。在搜索用戶控件上單擊搜索按鈕時,我不想將結果加載到結果用戶控件中。

父視圖:

<ContentControl x:Name="SearchViewModel"/> 
<ContentControl x:Name="ResultsViewModel"/> 

父虛擬


[Export(typeof(IMainViewModel))] 
public class ParentViewModel : Screen, IMainViewModel{ 

public SearchViewModel SearchViewModel { get; set; } 
public ResultsViewModel ResultsViewModel { get; set; } 
public ParentViewModel() 
{ 
    SearchViewModel = new SearchViewModel(); 
    ResultsViewModel = new ResultsViewModel(); 
} 
}

搜索查看

<TextBox x:Name="Term"/>   
<Button Content="Search" x:Name="Search"/> 

搜索VM


public class SearchViewModel : PropertyChangedBase 
{ 
     private string _term; 

     public string Term 
     { 
      get { return _term; } 
      set 
      { 
       _instrumentId = value; 
       NotifyOfPropertyChange(() => _term); 
      } 
     } 

     public void Search() 
     { 
      //Call WCF Service 
      //Send results to results user control? 
     } 
} 

所以實際上如何傳遞或訪問數據/與卡利微不同的用戶控件之間的方法/視圖模型?

回答

3

您可以通過Caliburn Micro Event Aggregator使用活動。您可以在一個視圖模型中發佈一個事件,並在另一個視圖模式中訂閱該事件。這使模型解耦 - 唯一的耦合是由事件本身完成的,您可以在其中存儲要傳輸的數據。

+0

謝謝!奇蹟般有效 – 2012-07-09 11:14:03