我在wpf应用程序中实现MVVM模式。我们有一个文本框,可以在KeyUp事件上调用事件处理程序。我使用ViewModel中的属性tb_property绑定了该文本框的文本。我的想法是让ViewModel实现INotifyPropertyChange并绑定执行什么事件处理程序所做的命令对象,并将ICommand实现到该tb_property上的更改。这是个好主意,我该怎么做?我试图摆脱View中的大部分事件。先感谢您。
答案 0 :(得分:2)
是的,根据您使用的MVVM框架,您可以将控件的事件绑定到viewmodel上的iCommand。
我使用MVVM灯,因此他们在realaycommand中有一个内置版本。然后我按照以下方式绑定控件的事件:
将以下内容添加到usercontrol / window开启标记中(cmd使用icommand的mvvm framworks实现):
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd="http://www.galasoft.ch/mvvmlight"
然后我将命令绑定添加到控件中,如:
<TextBox Grid.Row="1" Text="{Binding tb_property, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="YourEvent">
<cmd:EventToCommand Command="{Binding YourCommandPropertyOnVIewModel}" CommandParameter="OptionalCommandParameter"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
这样您就可以将所有“事件”移动到视图模型中,我喜欢这个,因为其他控件可以使用相同的命令。
希望这有帮助
JK