[英]Binding function to textblock in listbox c# WPF
我正在学习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在我的视图模型中而不在我的类媒体中(在模型中)。
另一个问题是我需要收到两个参数我该怎么做?
如果您有更好的方法,请向我解释。
提前致谢。
要链接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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.