gpt4 book ai didi

wpf - 从 View 模型打开新窗口

转载 作者:行者123 更新时间:2023-12-04 14:17:43 25 4
gpt4 key购买 nike

嗨,我有一个新手问题。我有 shell(它是 wpf 窗口)并且在这个 shell 中是屏幕(它是一个用户控件/ View 模型)。

我想从 View 模型中打开新窗口,而不是在 shell 中显示用户控件。

所以我创建了新窗口 - ChatView

<Window x:Class="Spirit.Views.ChatView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:extToolkit="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit.Extended" Title="ChatView" Height="545" Width="763">
<Grid Margin="4,4,4,4">
</Grid>
</Window>

使用 MEF 导出 ChatViewModel

 public interface IChatViewModel
{

}

[Export("ChatScreen",typeof(IChatViewModel))]
public class ChatViewModel
{

}

在 View 模型中我有这个方法:

使用 ShowScreen 类帮助我 Mr.Marco Amendola。它看起来像这样:

public class ShowScreen : IResult
{
readonly Type _screenType;
readonly string _name;

[Import]
public IShellViewModel Shell { get; set; }

Action<object> _initializationAction = screen => { };

public ShowScreen InitializeWith<T>(T argument)
{
_initializationAction = screen =>
{
var initializable = screen as IInitializable<T>;
if (initializable != null)
initializable.Initialize(argument);
};
return this;
}

public ShowScreen(string name)
{
_name = name;
}

public ShowScreen(Type screenType)
{
_screenType = screenType;
}

public void Execute(ActionExecutionContext context)
{
var screen = !string.IsNullOrEmpty(_name)
? IoC.Get<object>(_name)
: IoC.GetInstance(_screenType, null);

_initializationAction(screen);

Shell.ActivateItem(screen);
Completed(this, new ResultCompletionEventArgs());
}

public event EventHandler<ResultCompletionEventArgs> Completed = delegate { };

public static ShowScreen Of<T>()
{
return new ShowScreen(typeof(T));
}
}

我的问题是如果我尝试显示新窗口它不起作用,只有当我在 shell(window) 中显示新用户控件时它才有效。

我想实现类似 Skype 的行为。你有一个带有列表框的主窗口,你双击项目并显示新的聊天窗口。

主窗口可以在聊天窗口上使用 EventAggregator 发布,聊天窗口也可以在主窗口上发布。这是我的目标。

我知道我不能在显示新窗口时使用 ShowScreen 类。我想知道从 View 模型创建新窗口并注入(inject)事件聚合器的正确方法是什么到这个 vie 模型。

有什么建议吗?感谢您的帮助和时间。

最佳答案

您查看过 WindowManager.Show 或 WindowManager.ShowDialog 吗? Rob 在 http://caliburnmicro.codeplex.com/wikipage?title=The%20Window%20Manager 有 sample .您可以将此依赖项作为 IWindowManager 注入(inject)到您的 View 模型中。

关于wpf - 从 View 模型打开新窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4500252/

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