WPF 命令按钮 ListBoxItems

发布于 2024-08-10 07:52:26 字数 1326 浏览 4 评论 0原文

我有一个如下定义的列表框:

<ListBox x:Name="lstMedias" ItemsSource="{Binding Medias}" Width="Auto" Height="Auto">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Button Content="{Binding Name}" Tag="{Binding Name}" Click="Button_Click" Command="{Binding Path=LoadSimpleMoviePopupCommand}">
                <Button.Resources>
                    <Converters:LoadMovieMultiConverter x:Key="LoadMovieMultiConverter" />
                </Button.Resources>                                    
                <Button.CommandParameter>
                    <MultiBinding Converter="{StaticResource LoadMovieMultiConverter}">
                        <MultiBinding.Bindings>
                            <Binding ElementName="DragDropCanvas" />
                            <Binding Path="Tag" RelativeSource="{RelativeSource Self}" />
                        </MultiBinding.Bindings>
                     </MultiBinding>
                 </Button.CommandParameter>
              </Button>
          </DataTemplate>
      </ListBox.ItemTemplate>
</ListBox>

当尝试调用命令 LoadSimpleMoviePopupCommand 时,不会调用命令,但在调用单击事件时,会引发事件。

你知道为什么吗?这是正常行为吗?我们是否必须像 ListBoxItem doubleclick 那样欺骗?

I Have a listbox defined like below :

<ListBox x:Name="lstMedias" ItemsSource="{Binding Medias}" Width="Auto" Height="Auto">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Button Content="{Binding Name}" Tag="{Binding Name}" Click="Button_Click" Command="{Binding Path=LoadSimpleMoviePopupCommand}">
                <Button.Resources>
                    <Converters:LoadMovieMultiConverter x:Key="LoadMovieMultiConverter" />
                </Button.Resources>                                    
                <Button.CommandParameter>
                    <MultiBinding Converter="{StaticResource LoadMovieMultiConverter}">
                        <MultiBinding.Bindings>
                            <Binding ElementName="DragDropCanvas" />
                            <Binding Path="Tag" RelativeSource="{RelativeSource Self}" />
                        </MultiBinding.Bindings>
                     </MultiBinding>
                 </Button.CommandParameter>
              </Button>
          </DataTemplate>
      </ListBox.ItemTemplate>
</ListBox>

When Trying to call command LoadSimpleMoviePopupCommand, command is not called, but when calling click event, event is raised.

Do You have an idea why ? It is a normal behavior ? Do we have to trick like ListBoxItem doubleclick ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无可置疑 2024-08-17 07:52:26

可能是因为绑定失败。检查VS的输出窗口,看看是否有绑定错误。我怀疑 LoadSimpleMoviePopupCommand 属性不在您的数据项类(即您的 Media 类)上。

Probably because the binding failed. Check the output window of VS and see if there are any binding errors. I suspect the LoadSimpleMoviePopupCommand property is not on your data item class (ie. your Media class).

甜味拾荒者 2024-08-17 07:52:26

遇到了同样的问题,尝试一下,这

<Button Command="{Binding DataContext.YourCommand,RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}"

很正常,他在列表框中找不到您的命令绑定,因为您

<DataTemplate DataType ...

在该列表框中设置了类似的内容,所以他将在数据类型而不是视图模型中查找该绑定(我假设: )

had the same problem, try this

<Button Command="{Binding DataContext.YourCommand,RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}"

it's quite normal, he can't find your command binding inside the listbox because you set something like

<DataTemplate DataType ...

in that listbox so he'll be looking for that binding inside the datatype and not the viewmodel (I assume :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文