WPF DataTomplate中Command无效
WPF Command 无效
2023-09-14 09:08:40 时间
问题:在DataTomplate中添加一个Button,Button添加Command,但是Command生效。
原因:ItemTemplate的DataContext指代不明,需要改为父类的DataContext。
解决方法:使用RelativeSource关键字,手动指定DataComtext和Command。
<userControl:AutoHideTabControl.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Title}" Margin="5,0,0,0" > <i:Interaction.Triggers> <i:EventTrigger EventName="MouseLeftButtonDown"> <i:InvokeCommandAction Command="{Binding Path=DataContext.TabItemClickCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=userControl:AutoHideTabControl}}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.TemplatedParent}}"></i:InvokeCommandAction> </i:EventTrigger></i:Interaction.Triggers> </TextBlock> <!-- CommandParameter, 将父类作为参数传给后台命令 --> <Button Content="Test" Command="{Binding Path=DataContext.(viewModels:CaseViewModel.TabItemClickCommand), RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=userControl:AutoHideTabControl}}"CommandParameter="{Binding RelativeSource={x:Static RelativeSource.TemplatedParent}}"></i:InvokeCommandAction>> </StackPanel> </DataTemplate> </userControl:AutoHideTabControl.ItemTemplate>
对应后台代码:
// ViewModel构造函数 public Constructors() { TabItemClickCommand = new DelegateCommand<object>(TabItemClick); } //命令声明 public DelegateCommand<object> TabItemClickCommand{get; private set;} //命令实现 public void TabItemClick(object obj) { var control = obj as ContentPresenter; }
参考:WPF ListBoxItem DataTempldate command 执行问题
相关文章
- WPF中添加一个文本输入框,按Enter回车,执行绑定的Command
- 使用WPF来创建 Metro UI程序
- AYUI快速开发2016-6-29 ,全部免费,WPF普遍之路梦想开启
- wpf开源界面收集
- WPF
- WPF中DataGrid CheckBox选择数据错乱
- WPF Template,ItemsTemplate,ItemContainerStyle,ItemsPanel,ContentPresenter
- WPF中XAML中使用String.Format格式化字符串示例
- wpf 两个DataGrid的滚动条实现同步滚动
- wpf 中的style
- WPF ToggleButton Style
- WPF : ControlTemplate和DataTemplate的区别
- wpf 父控件透明子控件不透明
- WPF 自定义DataGrid控件样式模板5个