Caliburn.Micro:用户控件之间的通信

时间:2012-07-09 09:55:25

标签: wpf caliburn.micro

我正在构建我的第一个Caliburn WPF应用程序,我发现自己遇到了以下问题。

我有一个父视图,加载了两个用户控件:Search&结果。当在搜索用户控件上单击搜索按钮时,我不想在结果用户控件中加载结果。

家长视图:

<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?
        }
}

实际上,我如何使用caliburn micro在不同的用户控件/视图模型之间传递或访问数据/方法?

1 个答案:

答案 0 :(得分:3)

您可以通过Caliburn Micro Event Aggregator使用活动。您可以在一个视图模型中发布事件,并在另一个视图模型中订阅该事件。这样可以使模型解耦 - 唯一的耦合是由事件本身完成的,您可以在其中存储要传输的数据。