C# WPF-MVVM灯光、功能区控件、嵌套用户控件/视图以及在用户控件/视图之间使用事件
我正在MVVM light和Unity的帮助下构建一个WPF应用程序。 我在主窗体中有一个功能区控件,一个选项卡没有选项卡类别,一个选项卡类别中有两个选项卡。用户控件3包括用户控件2和用户控件1 我希望在单击用户控件2时使选项卡类别以及选项卡2和3可见,并在单击用户控件3或1时使它们不可见。 我对mvvm结构中的事件处理有点混淆 我想用MVVM规则正确地完成这项工作。你能给我举个例子或者一些真正有用的指导吗C# WPF-MVVM灯光、功能区控件、嵌套用户控件/视图以及在用户控件/视图之间使用事件,c#,wpf,xaml,mvvm,mvvm-light,C#,Wpf,Xaml,Mvvm,Mvvm Light,我正在MVVM light和Unity的帮助下构建一个WPF应用程序。 我在主窗体中有一个功能区控件,一个选项卡没有选项卡类别,一个选项卡类别中有两个选项卡。用户控件3包括用户控件2和用户控件1 我希望在单击用户控件2时使选项卡类别以及选项卡2和3可见,并在单击用户控件3或1时使它们不可见。 我对mvvm结构中的事件处理有点混淆 我想用MVVM规则正确地完成这项工作。你能给我举个例子或者一些真正有用的指导吗 这可以通过在用户单击选项卡时添加事件并在xaml的可见性标记下添加该属性来实现。另外,请
这可以通过在用户单击选项卡时添加事件并在xaml的可见性标记下添加该属性来实现。另外,请查看以了解xaml中的映射,并从中了解事件处理
希望有帮助。您的功能区或选项卡应该由ViewModel进行备份,比如说
TabCategoryViewModel
或Tab2ViewModel
和Tab3ViewModel
。在这些ViewModels中,您可以插入IMessanger
服务(当然,如果尚未注册,请先注册),并创建POCO事件消息,如SelectedViewMessage
public class SelectedViewMessage
{
public string ViewName { get; set; }
}
在您的选项卡CategoryViewModel
中,您将注册以收听此消息
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();
}
}
}
}
此代码可以放在
ViewSelectedCommand
或类似命令中,您可以使用混合交互触发器/操作将其绑定到视图/用户控件上的特定事件他现在明确要求通过尊重MVVM模式来解决此问题。事件处理违反了MVVM模式。ViewModel应是视图不可知的
var message = new SelectedViewMessage {
ViewName = "UserControl2";
};
this.messangerService.Send<SelectedViewMessage>(message);