wpf 是否将单击事件添加到按钮模板?

aydmsdu9  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(142)

我正在编写一个WPF应用程序,需要能够将带有参数的方法调用绑定到按钮的Click事件(或等效事件)。
到目前为止,为了进行测试,我以编程方式创建按钮并将它们设置为必需的StackPanel的子项。

foreach (Page p in pages)
        {
            Button newTestBtn = new Button();
            newTestBtn.Content = p.Title;
            newTestBtn.Name = p.Name.Replace(" ", string.Empty);
            newTestBtn.FontSize = 14;
            newTestBtn.Margin = new Thickness(2, 0, 2, 2);
            newTestBtn.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF414141"));
            newTestBtn.Click += (s, e) => { SwitchPage(p); };

            hp.CreateNewTestEntry(newTestBtn);
        }

在确定这远远不是最好的方法之后,我建立了一个更持久的解决方案,将ItemsControl绑定到序列化类的ObservableCollection。
不过,我遇到了一个新问题,将ICommand或RoutedEventArg应用于按钮上的Click或Command似乎根本不起作用。

foreach (Page p in pages)
        {
            TempCl tcl = new TempCl();
            tcl.ToolName = p.Title;
            tcl.TriggerEvent = SwitchPage(p);

            tempHolder.Add(tcl);
        }

Google和StackOverflow搜索还没有找到任何简单的方法来做到这一点,我有点卡住了。

<Button Margin="0, 0, 0, 2" Content="{Binding ToolName}" Command="{Binding TriggerEvent}" FontSize="14" Background="#FF414141"/>

有谁知道不需要添加冗长的类就能做到这一点的正确方法吗?一定有一个优雅的解决方案。

2w3kk1z5

2w3kk1z51#

首先,如果您希望将来的应用程序更具可维护性,您必须从学习MVVM* 方法的 * 基础知识开始。基本上,您的代码可以分为3个不同的部分:* 模型-视图模型-视图。*
正如您问题的注解中提到的,需要将Button的 Command 依赖属性绑定到 ViewModel 中的 ICommand 类型属性(应为View或Control等的DataContext),并指定 CommandParameter(它将传递给Command)。
通用 ICommand 实现(例如DelegateCommand<T>RelayCommand<T>)允许您指定参数,在您的情况下,该参数可以是描述导航目标的任何参数。
您可以通过Page navigation HERE找到更详细的示例。
此外,了解和使用Prism Library可能会很有用,它提供了很多模块化功能,在单个窗口中进行视图导航等。

相关问题