簡體   English   中英

WPF-MVVM燈光,功能區控件,嵌套的用戶控件/視圖以及在用戶控件/視圖之間使用事件

[英]WPF - MVVM Light, Ribbon Control, nested user controls/views and using events between user controls/views

我正在借助MVVM light和Unity構建WPF應用程序。 我在主窗體中具有一個功能區控件,其中一個選項卡不包含選項卡類別,而兩個選項卡則在一個選項卡類別中。 用戶控件3包括用戶控件2和用戶控件1。

我想在用戶控件2中單擊時使“選項卡類別”以及選項卡2和3可見,而在用戶控件3或1中單擊時使它們不可見。我對mvvm結構中的事件處理有些困惑。

我想使用MVVM規則正確執行此操作。 你能給我一個例子或一些非常有用的指導怎么做嗎?

檢查外觀

您的Ribbon或選項卡應該由ViewModel備份,比如說TabCategoryViewModelTab2ViewModelTab3ViewModel 在這些ViewModel中,您注入IMessanger服務(如果尚未完成,當然IMessanger注冊它)並創建POCO事件消息,例如SelectedViewMessage

public class SelectedViewMessage 
{
    public string ViewName { get; set; }
}

您將在TabCategoryViewModel內部注冊以收聽此消息

public class TabCategoryViewModel : ViewModelBase
{
    public readonly IMessanger messageService;

    public TabCategoryViewModel(IMessanger messageService) 
    {
        if(messageService == null) 
        {
             throw ArgumentNullException("messageService");
        }

        this.messageService = messageService;

        this.messageService.Register<GoToPageMessage>(this, OnSelectedViewChanged);
    }

    protected void OnSelectedViewChanged(SelectedViewMessage message) 
    {
         this.IsVisible = message.ViewName == "UserControl2";
    }

    private bool isVisible;
    public bool IsVisible 
    {
        get { return isVisible; }
        set 
        {
            if(isVisible != value) 
            {
                isVisible = value;
                RaisePropertyChanged();
            }
        }
    }
}

您將相同的IMessanger服務注入用於綁定UserControl2並通過觸發消息的ViewModel中

var message = new SelectedViewMessage {
    ViewName = "UserControl2";
};
this.messangerService.Send<SelectedViewMessage>(message);

可以將這段代碼放置在ViewSelectedCommand或類似的內容中,並且可以使用Blend Interactivity觸發器/動作將其綁定到View / UserControl上的某些事件。

只要用戶單擊選項卡,然后在可見性標記下的xaml中添加該屬性,就可以通過添加事件onPropertyChange來實現。 另請參閱處理UI控件,以了解xaml和ti中的映射可以了解Here Hope的事件處理。

暫無
暫無

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

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