我在UWP中创建应用程序,我有疑问。 我可以以某种方式连接MVVM Light与SelectionChanged事件(例如ListView)或与其他事件? 我希望当我点击ListView中的某个项目时,我会调用SelectionChanged。
我该怎么办?
答案 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>