我正在构建我的第一个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在不同的用户控件/视图模型之间传递或访问数据/方法?
答案 0 :(得分:3)
您可以通过Caliburn Micro Event Aggregator使用活动。您可以在一个视图模型中发布事件,并在另一个视图模型中订阅该事件。这样可以使模型解耦 - 唯一的耦合是由事件本身完成的,您可以在其中存储要传输的数据。