Привет, у меня проблема новичка.У меня есть оболочка (это окно wpf), и в этой оболочке есть экран (это пользовательский элемент управления / модель представления).
Я хотел бы открыть новое окно из модели представления, а не отображать пользовательский элемент управления в оболочке.
Итак, я создаю новое окно - 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>
Экспорт ChatViewModel с MEF.
public interface IChatViewModel
{
}
[Export("ChatScreen",typeof(IChatViewModel))]
public class ChatViewModel
{
}
В представлении моделиУ меня есть этот метод:
С классом ShowScreen мне поможет мистер Марко Амендола.Это выглядит примерно так:
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));
}
}
Моя проблема в том, что если я пытаюсь показать новое окно, оно не работает, оно работает, только если я показываю новый пользовательский элемент управления в оболочке (окне).
Я хотел бы добиться поведения что-то вроде в скайпе.У вас есть главное окно со списком, вы дважды щелкнули по элементу, и это показывает новое окно чата.
Главное окно может публиковать с EventAggregator в окне чата, а также окно чата может публиковать в главном окне.Это моя цель.
Я знаю, что не могу использовать класс ShowScreen при показе нового окна.Я хотел бы знать, как правильно создать новое окно из модели представления и внедрить агрегатор событий в эту модель.
Любой совет?Спасибо за вашу помощь и время.