我正在学习MVVM,因此它可能是新手问题。
我需要绑定函数:
private void doubleClick(object sender, MouseButtonEventArgs e)
文本块中的:
<Grid>
<ListBox Name="mediaList" Grid.Row="1"
ItemsSource="{Binding Medias}"
IsSynchronizedWithCurrentItem="True">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type Models:Media}">
<StackPanel Orientation="Horizontal">
<Image Source="icon-play-128.png" Margin="0,0,5,0" />
<TextBlock Text="{Binding Name}" Margin="0,0,5,0">
<TextBlock.InputBindings>
<MouseBinding Command="{Binding DoubleClick}" Gesture="LeftDoubleClick" />
</TextBlock.InputBindings>
</TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
但第一个问题是DoubleClick在我的视图模型中而不在我的类媒体中(在模型中)。
另一个问题是我需要接收两个参数我该怎么做?
如果您有更好的方法,请向我解释。
提前致谢。
答案 0 :(得分:3)
要链接Command及其Execute方法,您可以使用委托。 MSDN有很好的证明这一点的例子。见那里的例子。
其次,您实际上是在尝试处理MouseDoubleClick事件。但是,Control类公开了MouseDoubleClick事件。 TextBlock不是控件。因此,最好将TextBlock包装在ContentControl中。
<ContentControl MouseDoubleClick="ContentControl_MouseDoubleClick">
<TextBlock ... />
</ContentControl>
然后从您的事件处理程序中以编程方式调用您的命令。
如果您希望将所有内容解除耦合,并且处理该事件非常重要,那么请编写一个行为。在该行为中,您可以附加MouseDoubleClick事件处理程序,并执行您喜欢的任何操作。您可以在适合您需要的行为中引入您自己的属性。
using System.Windows.Interactivity;
public class MyBehavior : Behavior<ContentControl>
{
public MyBehavior()
{}
protected override void OnAttached()
{
AssociatedObject.MouseDoubleClick += AssociatedObject_MouseDoubleClick;
base.OnAttached();
}
protected override void OnDetaching()
{
AssociatedObject.MouseDoubleClick -= AssociatedObject_MouseDoubleClick;
}
void AssociatedObject_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
// do something
}
}
XAML用法:
<ContentControl ...
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" >
<TextBlock .../>
<i:Interaction.Behaviors>
<local:MyBehavior />
</i:Interaction.Behaviors>
</ContentControl>