使用SelectionChanged连接MVVM Light

时间:2017-02-01 20:01:59

标签: binding uwp mvvm-light

我在UWP中创建应用程序,我有疑问。 我可以以某种方式连接MVVM Light与SelectionChanged事件(例如ListView)或与其他事件? 我希望当我点击ListView中的某个项目时,我会调用SelectionChanged。

我该怎么办?

2 个答案:

答案 0 :(得分:2)

您可以在ViewModel中编写方法,并使用x:bind连接ViewModel。

MVVMLight的方法在WPF中使用,无法在Method中绑定事件。

UWP可以使用x:bind将UI事件绑定到ViewModel。

样本:

XAML:

<ListView SelectionChanged = "{x:bind view.SelectionChanged }"/>

XAML.cs:

private ViewModel View{set;get;}

视图模型:

public void SelectionChanged()
{

}

您可以使用在单击ListViewItem时运行的ItemClick事件。

答案 1 :(得分:0)

在viewmodel里面有* .cs

public class RelayCommand : ICommand
{
    private Predicate<object> _canExecute;
    private Action<object> _execute;

    public RelayCommand(Predicate<object> canExecute, Action<object> execute)
    {
        this._canExecute = canExecute;
        this._execute = execute;
    }

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }

    public bool CanExecute(object parameter)
    {
        return _canExecute(parameter);
    }

    public void Execute(object parameter)
    {
        _execute(parameter);
    }
}

public class MyViewModel
{
    private ICommand _doSelectionChangedCommand;
    public ICommand DoSelectionChangedCommand
    {
        get
        {
            if (_doSelectionChangedCommand == null)
            {
                _doSelectionChangedCommand = new RelayCommand(
                    p => this.CanSelectionChanged,
                    p => this.DoSomeImportantMethod());
            }
            return _doSomething;
        }
    }
}

在你的viewSomemthing.xaml中 - 对于命名空间

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

- 然后转到您的控制,我们将使用Combobox作为示例

<ComboBox ... />
   <i:Interaction.Triggers>
    <EventTrigger EventName="SelectionChanged">
        <i:InvokeCommandAction Command="{Binding DoSelectionChangedCommand}"/>              
    </EventTrigger>
</i:Interaction.Triggers>
</ComboBox>