WPF listbox 绑定问题

sqfeiyu 2016-01-12 11:30:44
问个很常见的问题:listbox的Item绑定Command为何无效?
XAML:
<Grid Name="mgrid" SizeChanged="mgrid_SizeChanged" DataContext="{StaticResource vmm}">
... ...
<ListBox Name="lstMain" HorizontalAlignment="Left" Margin="0,2,0,0" Grid.Row="1" Grid.ColumnSpan="2" VerticalAlignment="Top" Width="{Binding ElementName=mgrid, Path=ActualWidth}" Height="{Binding ElementName=mrow2, Path=ActualHeight}" Grid.RowSpan="2" Background="{x:Null}" ItemsSource="{Binding Path=MDSysModules}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel HorizontalAlignment="Left" Orientation="Horizontal"></WrapPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Path=ModuleName}" Width="150" Height="{Binding Path=MenuHeight, ElementName=mwin}" Foreground="#FFF7B913" FontSize="24" FontWeight="Bold" BorderBrush="#FF0C0B0B" BorderThickness="1,1,0.5,0" Command="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DataContext.OnSysModuleClick}">
<Button.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF092E6E" Offset="0.596"/>
<GradientStop Color="White" Offset="0.009"/>
</LinearGradientBrush>
</Button.Background>
</Button>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

后台vmm的Command方法:

public ICommand OnSysModuleClick
{
get { return new DelegateCommand(LoadSubMedules); }
}

测试,在ListBox外面用一个Botton绑定OnSysModuleClick是没有问题的
但放在ListBox里面为何无效??
恳请指教!

说明:
Command="{Binding RelativeSource={RelativeSource AncestorType=ListBox}, Path=DataContext.OnSysModuleClick}"
或Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=DataContext.OnSysModuleClick}" 也无效
...全文
181 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sqfeiyu 2016-01-12
  • 打赏
  • 举报
回复
自已解决~~ 原来数据源不是ListBox的DataContext, 因为 ListBox没有直接设置DataContext, 必须要找到有设置DataContext的那一层,也就是Grid. 还是得感谢一下duanzi_peng的热心
sqfeiyu 2016-01-12
  • 打赏
  • 举报
回复
没有哪位能帮忙找下问题原因吗??
sqfeiyu 2016-01-12
  • 打赏
  • 举报
回复
有试过的 Command="{Binding RelativeSource={RelativeSource AncestorType=ListBox}, Path=DataContext.OnSysModuleClick}" 或Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=DataContext.OnSysModuleClick}" 也无效
exception92 2016-01-12
  • 打赏
  • 举报
回复
Command="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DataContext.OnSysModuleClick}" -》 不应该是 TemplateParent 应该找它的“祖先”类型 也就是ListBox
exception92 2016-01-12
  • 打赏
  • 举报
回复
AncestorType=UserControl -》 应该是 Listbox容器

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧