gpt4 book ai didi

c# - 将函数绑定(bind)到列表框中的文本 block c# WPF

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:09 25 4
gpt4 key购买 nike

我正在学习 MVVM,所以它可能是新手问题。

我需要绑定(bind)函数:

private void doubleClick(object sender, MouseButtonEventArgs e)

在文本 block 中:

<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 在我的 View 模型中而不是在我的类媒体中(在模型中)。

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

如果你有更好的方法请告诉我。

提前致谢。

最佳答案

  1. 要链接 Command 及其 Execute 方法,您可以使用委托(delegate)。 MSDN有很好的例子证明这一点。请参阅此处的示例。

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

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

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

  1. 如果您想保持一切分离,并且处理该事件非常重要,那么请编写一个行为。在该行为中,您可以附加 MouseDoubleClick 事件处理程序,并执行任何您喜欢的操作。您可以在适合您需要的 Behavior 中引入您自己的属性。

    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>

关于c# - 将函数绑定(bind)到列表框中的文本 block c# WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34366740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com