这是我开始之前的一些背景。我开始用WPF创建我的应用程序,就像我以前在WinForms中编程一样。显然,这完全绕过了WPF的力量。现在我已经阅读了更多关于WPF和MVVM框架的内容,我开始调整我的应用程序,使其能够以Model ViewModel的方式工作。
在此之前,我曾经有我的窗口后面的代码,只需处理MouseDown RoutedEvents,然后继续并提示一个窗口进行签名。我的DockPanel和图像似乎没有Command。
我怎样才能用MVVM的方式做到这一点呢?RoutedEvents是解决这种情况的方法吗?
发布于 2013-11-05 19:47:59
将所有UI元素放入按钮的ControlTemplate中并使用它的命令,而不是将行为和内容复杂化:
<Button Command="{Binding YourCommand}">
<Button.Template>
<ControlTemplate TargetType="Button">
<DockPanel>
<Image/>
<!-- Whatever -->
</DockPanel>
</ControlTemplate>
</Button.Template>
</Button>发布于 2013-11-05 18:49:56
您可以使用共混SDK附带的交互触发器。
Steps -
System.Windows.Interactivity的引用。xmlns:interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"你可以把它当作一个例子-
<StackPanel>
<interactivity:Interaction.Triggers>
<interactivity:EventTrigger EventName="MouseDown">
<interactivity:InvokeCommandAction Command="{Binding CloseCommand}"/>
</interactivity:EventTrigger>
</interactivity:Interaction.Triggers>
</StackPanel>这里,CloseCommand在您的ViewModel类中。
发布于 2013-11-05 19:11:20
要实现图像,请单击:
在我的示例中,我计算单击计数,因为不知道如何做得更好。
public class ImageHelper : Image
{
public static readonly RoutedEvent MouseLeftButtonClick =
EventManager.RegisterRoutedEvent(
"MouseLeftButtonClick",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(ImageHelper));
public event RoutedEventHandler MouseLeftButtonClickEvent
{
add
{
AddHandler(MouseLeftButtonClick, value);
}
remove
{
RemoveHandler(MouseLeftButtonClick, value);
}
}
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
if (e.ClickCount == 1)
{
RaiseEvent(new MouseLeftButtonClickEventArgs(
MouseLeftButtonClick, this));
}
base.OnMouseLeftButtonDown(e);
}
public class MouseLeftButtonClickEventArgs : RoutedEventArgs
{
public MouseLeftButtonClickEventArgs(RoutedEvent routedEvent, object source)
: base(routedEvent, source)
{
// some code.....
}
}
}XAML:
<local:ImageHelper>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonClickEvent">
<i:InvokeCommandAction Command="{Binding Path=MyCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</local:ImageHelper>https://stackoverflow.com/questions/19796221
复制相似问题