gpt4 book ai didi

c# - WPF - MVVM Light、Ribbon Control、嵌套用户控件/ View 以及在用户控件/ View 之间使用事件

转载 作者:行者123 更新时间:2023-12-03 10:35:10 26 4
gpt4 key购买 nike

我正在借助 MVVM light 和 Unity 构建 WPF 应用程序。
我在主窗体中有一个功能区控件,一个选项卡没有选项卡类别,一个选项卡类别中有两个选项卡。用户控件 3 包括用户控件 2 和用户控件 1。

我想在单击用户控件 2 时使选项卡类别和选项卡 2 和 3 可见,并在单击用户控件 3 或 1 时使它们不可见。
我对 mvvm 结构中的事件处理有点困惑。

我想用 MVVM 规则正确地做到这一点。你能给我一个例子或一些非常有用的指导吗?

Check how it looks like

最佳答案

您的功能区或选项卡应由 ViewModel 备份,例如 TabCategoryViewModelTab2ViewModelTab3ViewModel .在这些 ViewModel 中注入(inject) 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();
}
}
}
}

你注入(inject)相同的 IMessanger服务到您用来绑定(bind) UserControl2 并通过以下方式触发消息的 ViewModel
var message = new SelectedViewMessage {
ViewName = "UserControl2";
};
this.messangerService.Send<SelectedViewMessage>(message);

此代码可以放在 ViewSelectedCommand 中或类似的东西,您可以使用 Blend Interactivity Triggers/Actions 将其绑定(bind)到 View/UserControl 上的某些事件

关于c# - WPF - MVVM Light、Ribbon Control、嵌套用户控件/ View 以及在用户控件/ View 之间使用事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33914329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com