0

在加载窗口期间,我使用以下代码在 ViewModel 中调用 LoadCommand。

<code>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Loaded">
            <i:InvokeCommandAction Command="{Binding LoadCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>   
</code>

但是我看到的是在 LoadCommand 触发之前加载窗口。所以我在 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。提前谢谢你。

4

1 回答 1

1

问题似乎是在您的 ViewModel 被实例化并绑定到 DataContext 之前窗口已经加载。解决方案是在 View 之前实例化 ViewModel。

var vm = new MyViewModel();
var view = new MyView();
view.DataContext = vm;
view.Show();

不要使用实例化视图然后“发现”适用的视图模型的框架,至少在这种情况下不是。

于 2013-08-08T15:54:03.023 回答