我有一個帶有MVVM模式的WPF項目。使用參數調用視圖構造函數
在後面的代碼,我所說的觀點:
NavigateToViewCommand command = new NavigateToViewCommand(Container.Container.GetA<IProductViewModel>());
command.Execute();
的NavigateToViewCommand看起來是這樣的:
public class NavigateToViewCommand : WpfCommand
{
private readonly object _viewToNavigate;
public NavigateToViewCommand(object viewToNavigate) : base("Navigate")
{
_viewToNavigate = viewToNavigate;
}
protected override void RunCommand(object parameter)
{
Container.Container.GetA<IMainViewModel>().NavigateToView(_viewToNavigate);
}
protected override IEnumerable<string> GetPreconditions(object parameter)
{
yield break;
}
}
這裏的IProductViewModel接口:
public interface IProductViewModel : IViewModelBase
{
string Name { get; }
IEnumerable<string> Products { get; }
}
的IViewModelBase是空的接口它實現了INotifyPropertyChanged接口。 IMainViewModel實現了IViewModelBase接口。
在我看來,我有一個沒有參數的構造函數和參數爲int的構造函數。我想用參數調用構造函數。我怎麼做?
這裏是我WPFCommand類:
public abstract class WpfCommand : ICommand
{
private readonly string _verb;
protected WpfCommand(string verb)
{
_verb = verb;
}
public string Verb
{
get { return _verb; }
}
public void Execute(object parameter)
{
RunCommand(parameter);
}
protected abstract void RunCommand(object parameter);
protected abstract IEnumerable<string> GetPreconditions(object parameter);
public bool CanExecute(object parameter)
{
return GetPreconditions(parameter).Count() < 1;
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
}
在您的第一個代碼片段中,您將獲得一個IProductViewModel實例,該實例可能是您要導航到的視圖模型。你想調用這個IProductViewModel實例的重載構造函數('int')嗎? –
@AndrewStephens是的,IProductViewModel是我想用於我需要的視圖的視圖模型。我想調用ProductView的重載構造函數,而不是視圖模型。 –
你的代碼顯示了你如何得到虛擬機的一個實例,但是它的關聯視圖是如何實例化的?我注意到在你的命令代碼中你調用了IMainViewModel的NavigateToView()方法。它在那裏嗎? –