[英]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備份,比如說TabCategoryViewModel
或Tab2ViewModel
和Tab3ViewModel
。 在這些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.