2012-07-09 122 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