MVVM Madness: Commands

后端 未结 7 1105
星月不相逢
星月不相逢 2021-01-30 01:38

I like MVVM. I don\'t love it, but like it. Most of it makes sense. But, I keep reading articles that encourage you to write a lot of code so that you can write XAML and don\'t

7条回答
  •  面向向阳花
    2021-01-30 02:06

    Although I prefer not to write code-behind when using the MVVM pattern, I think it's OK to do it as long as that code is purely related to the UI.

    But this is not the case here : you're calling a view-model command from the code-behind, so it's not purely UI-related, and the relation between the view and the view-model command is not directly apparent in XAML.

    I think you could easily do it in XAML, using attached command behavior. That way you can "bind" the MouseDoubleClick event to a command of your view-model :

    
       
          
       
    
        ...
    
    

    You can also easily access the selected item of the ListView without referring to it directly, using the ICollectionView interface :

    private ICommand _doSomething;
    
    public ICommand DoSomething
    {
        get
        {
            if (_doSomething == null)
            {
                _doSomething = new DelegateCommand(
                    () =>
                    {
                        ICollectionView view = CollectionViewSource.GetDefaultView(Items);
                        object selected = view.CurrentItem;
                        DoSomethingWithItem(selected);
                    });
            }
            return _doSomething;
        }
    }
    

提交回复
热议问题