【问题标题】:Command binding to a button inside a DataTemplate not working命令绑定到 DataTemplate 内的按钮不起作用
【发布时间】:2018-07-31 08:10:39
【问题描述】:

例子:

<ListBox Name="List" 
             ItemsSource="{Binding Items}" 
             SelectedIndex="{Binding SelectedIndex}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <DockPanel >
                    <Button DockPanel.Dock="Left" Content="Show" Command="{Binding ShowCommand}" CommandParameter="{Binding}"/>
                    <TextBlock Text="{Binding }"/>
                </DockPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

点击按钮什么都不做。我试图将命令绑定到DataTemplate 之外的按钮,它可以工作。我还尝试将DataTemplate 中的按钮注册到Click_event,这确实有效。

为什么该命令在 DataTemplate 中不起作用?

【问题讨论】:

    标签: wpf button command datatemplate


    【解决方案1】:

    由于命令是在ListBoxDataContext 中定义的,因此使用RelativeSource 绑定来帮助Button 定位命令:

    <ListBox.ItemTemplate>
        <DataTemplate>
            <DockPanel >
                <Button DockPanel.Dock="Left" Content="Show" Command="{Binding DataContext.ShowCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}" CommandParameter="{Binding}"/>
                <TextBlock Text="{Binding }"/>
            </DockPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
    

    或使用ElementName 绑定:

    <ListBox.ItemTemplate>
        <DataTemplate>
            <DockPanel >
                <Button DockPanel.Dock="Left" Content="Show" Command="{Binding DataContext.ShowCommand,ElementName=List}" CommandParameter="{Binding}"/>
                <TextBlock Text="{Binding }"/>
            </DockPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-22
      • 2013-10-23
      • 2020-03-06
      • 1970-01-01
      • 2020-05-28
      • 2015-12-09
      • 2018-06-14
      • 1970-01-01
      相关资源
      最近更新 更多