簡體   English   中英

使用Caliburn.Micro的視圖模型中的氣泡事件

[英]Bubble events in viewmodels using Caliburn.Micro

我有一個帶有搜索字段和一些結果的屏幕視圖模型,該視圖模型由多個較小的視圖模型組成:用於搜索字段的控件,以及每個結果的控件實例。

我的“容器”視圖模型(帶有搜索和結果)如下所示:

[Export(typeof(ShippingViewModel))]
public class ShippingViewModel : Screen, IHandle<SearchReferenceEvent>
{
    private readonly IEventAggregator events;

    [ImportingConstructor]
    public ShippingViewModel(IEventAggregator events)
    {
        this.events = events;

        this.Search = new QuickSearchViewModel(this.events);
    }

    public QuickSearchViewModel Search { get; set; }

    public void Handle(SearchReferenceEvent message)
    {
        System.Windows.MessageBox.Show(message.Reference);
    }
}

和“快速搜索”(帶有搜索字段)viewmodel:

[Export(typeof(QuickSearchViewModel))]
public class QuickSearchViewModel : PropertyChangedBase
{
    private readonly IEventAggregator events;

    private string currentSearch;

    [ImportingConstructor]
    public QuickSearchViewModel(IEventAggregator events)
    {
        this.events = events;
    }

    public string CurrentSearch // bound to the search field
    {
        get
        {
            return this.currentSearch;
        }

        set
        {
            this.currentSearch = value;
            this.NotifyOfPropertyChange(() => this.CurrentSearch);
        }
    }

    public void SearchReference(string reference) // bound to the search button
    {
        this.events.Publish(new SearchReferenceEvent(reference));
    }
}

該視圖將按預期顯示,並且搜索按鈕觸發SearchReference方法。

但是該事件似乎沒有冒泡到ShippingViewModel ,從未觸發過Handle

謝謝!

看來您從未訂閱ShippingViewModel的事件。 嘗試像這樣修改構造函數:

[ImportingConstructor]
public ShippingViewModel(IEventAggregator events)
{
    this.events = events;
    this.events.Subscribe(this); // <= register to receive events

    this.Search = new QuickSearchViewModel(this.events);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM