Wpf 在Silverlight中连接事件处理程序的MVVM方法

Wpf 在Silverlight中连接事件处理程序的MVVM方法,wpf,silverlight,events,mvvm,prism,Wpf,Silverlight,Events,Mvvm,Prism,在Silverlight/WPF中使用MVVM模式,如何连接事件处理程序?我试图将XAML Click属性绑定到视图模型中的委托,但无法使其工作 换言之,我想替换这个: <Button Content="Test Click" Click="Button_Click" /> 为此: <Button Content="Test Click" Click="{Binding ViewModel.HandleClick}" /> 其中HandleClick是处理程序。尝试此

在Silverlight/WPF中使用MVVM模式,如何连接事件处理程序?我试图将XAML Click属性绑定到视图模型中的委托,但无法使其工作

换言之,我想替换这个:

<Button Content="Test Click" Click="Button_Click" />
为此:

<Button Content="Test Click" Click="{Binding ViewModel.HandleClick}" />
其中HandleClick是处理程序。尝试此操作会引发运行时异常:

“System.Windows.Data.Binding”类型的对象无法转换为“System.Windows.RoutedEventHandler”类型


答案是在框架中使用Microsoft提供的扩展。使用dll System.Windows.Interactivity.dll和Microsoft.Expression.Interactions.dll,可以将事件绑定到视图模型中的处理程序方法:

<Button Content="Test Click"
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"      
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
    >
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <ei:CallMethodAction TargetObject="{Binding ViewModel}" MethodName="HandleClick" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

答案是在框架中使用Microsoft提供的扩展。使用dll System.Windows.Interactivity.dll和Microsoft.Expression.Interactions.dll,可以将事件绑定到视图模型中的处理程序方法:

<Button Content="Test Click"
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"      
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
    >
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <ei:CallMethodAction TargetObject="{Binding ViewModel}" MethodName="HandleClick" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

MVVM实现这一点的方法是使用命令和。 Button控件有一个名为Command的属性,该属性接收ICommand类型的对象

ICommand的一个常用实现是。要使用它,可以在视图模型中执行以下操作:

<Button Content="Test Click"
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"      
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
    >
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <ei:CallMethodAction TargetObject="{Binding ViewModel}" MethodName="HandleClick" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>
公共类视图模型 { public ICommand DoSomethingCommand{get;private set;} 公共视图模型 { DoSomethingCommand=新的delegatecommandandledosomethingcommand; } 私有void handledosmethingcommand { //做事 } } 然后在XAML中:

<Button Content="Test Click" Command={Binding DoSomethingCommand} />

如果您想了解更多关于MVVM的信息,那么这是一个很好的起点。

MVVM的方法是使用命令和。 Button控件有一个名为Command的属性,该属性接收ICommand类型的对象

ICommand的一个常用实现是。要使用它,可以在视图模型中执行以下操作:

<Button Content="Test Click"
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"      
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
    >
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <ei:CallMethodAction TargetObject="{Binding ViewModel}" MethodName="HandleClick" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>
公共类视图模型 { public ICommand DoSomethingCommand{get;private set;} 公共视图模型 { DoSomethingCommand=新的delegatecommandandledosomethingcommand; } 私有void handledosmethingcommand { //做事 } } 然后在XAML中:

<Button Content="Test Click" Command={Binding DoSomethingCommand} />

如果您想了解更多关于MVVM的信息,这是一个很好的起点。

我想说,这种方法可能应该用于除单击以外的事件,因为Button控件已经有了Command属性,这使得它更容易并且可能更正确地用于Click事件。我想说,这个方法可能应该用于Click以外的事件,因为Button控件已经有了Command属性,这使得它更容易并且可能更正确地用于Click事件。