在加载窗口期间,我使用以下代码在ViewModel中调用LoadCommand。
<code>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding LoadCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</code>
但我看到的是,在LoadCommand启动之前,Window正在加载。所以我的代码,我已经放在我的LoadCommand
public ICommand LoadCommand
{
get
{
if (_loadCommand == null)
{
_loadCommand = new RelayCommand(
param => this.Load(),
param => this.CanLoad
);
}
return _loadCommand;
}
}
List<Match> matchList;
ObservableCollection<Match> _matchObsCollection;
public ObservableCollection<Match> MatchObsCollection
{
get { return _matchObsCollection; }
set
{
_matchObsCollection = value;
OnPropertyChanged("MatchObsCollection");
}
}
public void Load()
{
matchList = matchBLL.GetMatch();
}
bool CanLoad
{
get { return true; }
}
我的窗户装好后就着火了。如果我把代码放在ViewModel的构造函数中,那么它会在加载Window之前激发。我想知道在MVVM中如何让命令先启动,然后再加载Window。提前感谢您。
问题似乎是在ViewModel被实例化并绑定到DataContext之前就已经加载了窗口。解决方案是在视图之前实例化ViewModel。
var vm = new MyViewModel();
var view = new MyView();
view.DataContext = vm;
view.Show();
不要使用实例化视图然后"发现"适用的视图模型的框架,至少在这种情况下不要这样做。