繁体   English   中英

将功能绑定到列表框c#WPF中的文本块

[英]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在我的视图模型中而不在我的类媒体中(在模型中)。

另一个问题是我需要收到两个参数我该怎么做?

如果您有更好的方法,请向我解释。

提前致谢。

  1. 要链接Command及其Execute方法,您可以使用委托。 MSDN有很好的例子证明了这一点。 看那里的例子。

  2. 其次,您实际上是在尝试处理MouseDoubleClick事件。 但是Control类暴露了MouseDoubleClick事件。 TextBlock不是一个控件。 因此,最好将TextBlock包装在ContentControl中。

     <ContentControl MouseDoubleClick="ContentControl_MouseDoubleClick"> <TextBlock ... /> </ContentControl> 

然后从您的事件处理程序,以编程方式调用您的命令。

  1. 如果你想保持所有去耦合,并且处理该事件非常重要,那么写一个行为。 在该行为中,您可以附加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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM