【发布时间】:2011-05-26 15:12:15
【问题描述】:
我在这里尝试在我的问题表单上实现提前:send parameter from view-model to constructor of another view-model。
我有一个外壳视图模型和两个视图模型。我需要将对象从一个视图模型传递到另一个视图模型(构造函数)。
我的视图模型如下所示:
LogOnViewModel:
public interface ILogOnViewModel : IScreen, IDataErrorInfo
{
string Nick { get; set; }
string Password { get; set; }
bool CanLogOn { get; set; }
void LogOn(string nick, string password);
}
public class LogOnViewModel : Screen,ILogOnViewModel
{
//[Import]
//private IShellViewModel _shellViewModel;
}
MessangerViewModel:
public interface IMessengerViewModel:IScreen
{
BitmapImage AvatarImage { get; set; }
string AvatarStatus { get; set; }
KeyValuePair<string, Friend> SelectedFriend { get; set; }
}
public class MessengerViewModel : Screen,IMessengerViewModel
{
}
在外壳视图模型中,我尝试为视图模型创建抽象工厂。
ShellViewModel:
public interface IFactory
{
ILogOnViewModel CreateLogOnViewModel();
IMessengerViewModel CreateMessengerViewModel();
}
public class ConcreteFactory : IFactory
{
#region Implementation of IFactory
public ILogOnViewModel CreateLogOnViewModel()
{
return new LogOnViewModel();
}
public IMessengerViewModel CreateMessengerViewModel()
{
return new MessengerViewModel();
}
#endregion
}
public interface IShellViewModel
{
void ShowLogOnView();
void ShowMessengerView();
}
[Export(typeof(IShellViewModel))]
public class ShellViewModel : Conductor<IScreen>, IShellViewModel
{
private ConcreteFactory _factory;
public ShellViewModel()
{
_factory=new ConcreteFactory();
ShowLogOnView();
}
public void ShowLogOnView()
{
ActivateItem(_factory.CreateLogOnViewModel());
//ActivateItem(IoC.Get<LogOnViewModel>());
}
public void ShowMessengerView()
{
ActivateItem(_factory.CreateMessengerViewModel());
//ActivateItem(IoC.Get<MessengerViewModel>());
}
}
我的问题是:如何从 LogOnVieModel 中的 Shell-view-model 调用方法。我得到了不好的使用 IoC 并将 inport shell-view-model 上的属性导入另一个视图。 Supposudely 最好在此使用事件聚合器。但我不知道如何在我的问题中使用这个类。
我认为,从 shell-view-model 发布方法并在 logon-view-model 中处理。
但我认为我现在所做的一切都很糟糕。
【问题讨论】:
标签: wpf ioc-container mef caliburn.micro