C#_西哥 2019-06-16 06:00 采纳率: 0%
浏览 473

wpf 在模板里命令绑定失效

<TreeView x:Name="treeView" Margin="0,0,20,28" Grid.RowSpan="2" >
                <HierarchicalDataTemplate ItemsSource="{Binding xx}" >
                    <TextBlock  Name="tbk" Text="{Binding 部门}" Padding="2"  >
                         <i:Interaction.Triggers >
                              <i:EventTrigger EventName="MouseRightButtonDown">
                                <i:InvokeCommandAction Command="{Binding Path=TbkComm}"  CommandParameter="{Binding ElementName=tbk}"/>
                            </i:EventTrigger> 
                         </i:Interaction.Triggers>
                    </TextBlock>
                    <HierarchicalDataTemplate.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Name="tbk" Text="{Binding 部门}" >
                            </TextBlock>
                        </DataTemplate>
                    </HierarchicalDataTemplate.ItemTemplate>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>

        </TreeView>
                后台
                private static UICommand tbkComm;
        public static UICommand TbkComm
        {
            get { return txtBoxComm; }
            set { txtBoxComm = value; }
        }
        public void getDateSet()//这个是构造器
        {

           TxtBoxComm .ExecuteAction = new Action<object>(事件);

        }
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-10 09:16
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在 WPF 中,当使用 ItemsSource 绑定到数据源时,如果要通过鼠标右键点击触发某个操作(例如绑定的文本框),你必须确保在数据绑定中包含一个 ContentTemplate。否则,你的操作将无法正确执行。

    解决此问题的方法是在您的 XML 文件中的 HierarchicalDataTemplate 标签内添加以下内容:

    <ContentTemplate>
        <TextBlock Name="tbk" Text="{Binding 部门}" />
    </ContentTemplate>
    

    然后,在您的 C# 代码中设置 TBKComm 属性为 null 或者不设置它,并且不要忘记在 OnInitialized() 方法或 Application_Startup() 方法中初始化它:

    private void OnInitialized()
    {
        if (TbkComm == null)
        {
            TbkComm = new UICommand("TBKComm", "Click");
        }
    
        // 假设您有一个名为 TBKComm 的自定义命令
        TbkComm.ExecuteAction += (sender, args) => MessageBox.Show("点击了部门文本框!");
    }
    

    这样,每当用户单击部门文本框时,都会显示一条消息框,表明他们已经点击了文本框。

    评论

报告相同问题?