RelayCommand触发CanExecute MVVM

时间:2014-08-28 19:11:51

标签: c# wpf mvvm icommand

对我的RelayCommands感到困惑:

我的Usercontrol资源中有一个按钮绑定到SelectedProduct:

<TextBox Text="{Binding ModelName, BindingGroupName=Group1,
         UpdateSourceTrigger=Explicit, ValidatesOnDataErrors=True, 
         NotifyOnValidationError=True}"/>
<Button Content="Save" Command="{Binding DataContext.SaveProductCommand, 
        RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />

触发以下内容:

    public RelayCommand<object> SaveProductCommand
    {
        get
        {
            if (_saveproductcommand == null)
                _saveproductcommand = new RelayCommand<object>(SaveProductEdits, CanSaveProduct);
            return _saveproductcommand;
        }
    }

    private bool CanSaveProduct(Object param)
    {
        if (_ESTContext.Products.Find(SelectedProduct.ModelName) != null)
            return true;
        else
            return false;
    }        
    private void SaveProductEdits(object param)
    {
        UpdateProductBindingGroup.CommitEdit();
        var mod = SelectedProduct as Product;
        if (SelectedProductIndex == -1)
            _products.Add(mod);
        else
        {
            var oldmod = _products.Select(e => e).Where(e => e.ModelID == mod.ModelID).First();
            if (oldmod != null)
                oldmod = mod;
        }
        SelectedProduct = null;
    }

当用户编辑文本框并单击&#34;保存&#34;按钮,我希望它评估&#34; CanSaveProduct&#34;那时候。在我看来,它是在创建ViewModel时进行评估的。我也尝试过使用SaveProductCommand.RaiseCanExecuteChanged(),但也许我把它放在错误的位置......

我正在寻找关于我做错了什么的指导,以及我如何能够执行我想要的行为

0 个答案:

没有答案