【问题标题】:UserControl Events are very slowUserControl 事件非常慢
【发布时间】:2012-06-07 00:27:30
【问题描述】:

我最近开始在 DLL 中移动我的用户控件。这些控件通常看起来像这样:

<UserControl x:Class="DialogBase.UserControl1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d"
         DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <Grid>
        <Button Content="OK" Click="OkButton_Click"/>
    </Grid>
</UserControl>

我希望能够像在标准控件中一样使用控件中的每个按钮。例如,当有人使用上面的控件时,他应该能够在自己的方法中处理单击事件,如下所示:

<lib:UserControl1 
        OkButtonClick="MyCostomClickMethod"
        />

我通常是这样实现的:(用户控件的代码隐藏文件)

    public static RoutedEvent OkButtonClickEvent = EventManager.RegisterRoutedEvent("OkButtonClick", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(UserControl1));

    public event RoutedEventHandler OkButtonClick
    {
        add 
        { 
            AddHandler(OkButtonClickEvent, value); 
        }
        remove
        {
            RemoveHandler(OkButtonClickEvent, value);
        }
    }

    private void OkButton_Click(object sender, RoutedEventArgs e)
    {
        RaiseEvent(new RoutedEventArgs(OkButtonClickEvent));
    }

这很好用,但速度很慢。单击和产生的操作之间的延迟可能长达一秒。谁能告诉我是否有更快或更好的方法来做到这一点?

【问题讨论】:

  • 您是否尝试在设计时仅添加事件处理程序?
  • 您是否在处理程序中执行任何 CPU 密集型任务?
  • 不,它们几乎是空的,我只是向它们添加了一个消息框或控制台输出。

标签: c# wpf xaml


【解决方案1】:

我会在你真正想要的事件的类中创建一个命令。然后将按钮命令绑定到它。您可以创建自己的命令或使用类似DelegateCommand

【讨论】:

  • 您好,感谢您的提示。我以前读过关于 ICommand 的文章,但总是以另一种方式使用它。但是我仍然想知道如何以我想要的方式使用它。我希望用户控件的用户能够像普通的 Windows wpf 控件一样使用它,而无需知道甚至查看其背后的代码。我想要一种允许我为用户提供简单解决方案的方法,传递命令和命令参数似乎有点多。你对我有什么建议吗?所以你知道,我仍在努力,当我找到适合我的解决方案时,我会给你功劳。
  • 我不认为你的方式是最好的解决方案。我建议使用我的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 2017-03-10
  • 2015-07-18
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
相关资源
最近更新 更多