[英]Window is loading first then Command is firing when I am using Interactivity
我在加载窗口期间使用以下代码在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的构造函数中,则会在窗口加载之前触发。 我想知道如何在MVVM中使命令首先执行并随后加载Window。 预先感谢您。
问题似乎是在实例化ViewModel并将其绑定到DataContext之前已加载了窗口。 解决方案是在View之前实例化ViewModel。
var vm = new MyViewModel();
var view = new MyView();
view.DataContext = vm;
view.Show();
不要使用实例化视图然后“发现”适用视图模型的框架,至少在这种情况下不这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.