1

我正在推动自己使我编写的应用程序更简单,并且我已经采取了一些步骤来做到这一点,但是我遇到了一个有趣的问题,它根本不觉得它对我来说是独一无二的。我想知道我做错了什么。

我有一个保存模型对象集合的 ViewModel。该视图是一个 ListView,它显示集合中的所有对象。模型对象具有操作它们的所有逻辑。在每个项目的 ListView 行内,我都有一个按钮,并且需要连接该按钮才能调用模型对象上的方法。

为了让它工作,我需要添加一个命令绑定,但要添加到父窗口数据上下文,它在行中传递模型对象的参数,以便可以在 ViewModel 中使用模型对象(父窗口数据上下文) 调用传入的模型对象上的方法。

这似乎比它需要的要复杂得多。我愿意扔掉我已经做过的任何事情,没有神圣的奶牛,我只是希望以一种更简单的方法来完成,这样一年后回顾起来很容易弄清楚我在做什么。

4

2 回答 2

0
{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}},
    Path=DataContext.MyCommand}
于 2012-03-29T15:29:45.747 回答
0

在 ViewModel 中为模型对象创建一个演示者类,并拥有这些对象的集合。然后,您可以将 ICommand 属性放在那些上,并传递对您要在父数据上下文中调用的方法的引用。

也许类似于以下内容:

public class ModelPresenter : INotifyPropertyChanged
{
    private Model _model;

    public ModelPresenter(Model model, Action<Model> parentAction)
    {
        _model = model
        _action = parentAction;
    }

    public ICommand MyAction
    {
        get { return new RelayCommand(() => _parentAction(_model)); }
    }

    ...
}

听起来您可能正在绑定到您的模型的属性您的视图。你不应该这样做,因为如果你的模型没有实现 INotifyPropertyChanged,它会导致内存泄漏(参见: http: //support.microsoft.com/kb/938416/en-us)。

于 2012-03-29T15:39:38.620 回答