Preben Huybrechts
Preben Huybrechts

Reputation: 6111

Caliburn.Micro: Communication between user controls

I'm building my first Caliburn WPF application, and I find myself in the following problem.

I have a parent view, with loads two user controls: Search & Results. When the search button is clicked on the Search user control, I wan't to load the results in the results user control.

Parent View:

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

Parent VM


[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();
}
}

Search View

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

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

So actually how can i pass or access data/methods between different user controls / view models with caliburn micro?

Upvotes: 1

Views: 1497

Answers (1)

Felice Pollano
Felice Pollano

Reputation: 33252

You can use events via the Caliburn Micro Event Aggregator. You can publish an event in one viewmodel and subscribe that event in the other. This keep the model decoupled - the only coupling is done by the event itself-, in which you can store the data to transfer.

Upvotes: 3

Related Questions