2012-06-06 3 views
1

Я недавно начал перемещать элементы управления в DLL. Эти элементы управления обычно выглядят примерно так:События UserControl очень медленные

<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)); 
    } 

Это работает отлично, но очень медленно. Задержка между щелчком и результирующим действием может достигать секунды. Может ли кто-нибудь сказать мне, есть ли более быстрый или каким-либо образом лучший способ сделать это?

+0

Вы пробовали просто добавить обработчик событий во время разработки? – Botonomous

+0

Выполняете ли вы какие-либо задачи с интенсивным использованием процессора в своих обработчиках? –

+0

Нет, они близки к пустым, я просто добавил к ним сообщение или консольный вывод. – peer

ответ

0

Я бы создал команду в классе, на которой вы действительно хотите событие. Затем привяжите к нему кнопку Button. Вы можете создать свою собственную команду или использовать что-то вроде DelegateCommand

+0

Привет, спасибо за подсказку. Я читал о ICommand раньше, но всегда использовал его по-другому. Однако я все еще удивляюсь, как я могу использовать это так, как хочу. Я хочу, чтобы пользователь пользовательского элемента управления мог использовать его, как обычный wpf-контроль Windows, не зная или даже не видя код позади него. Я хочу, чтобы это позволило мне предоставить простое решение для пользователя, передав команду, а параметр команды немного изменился. У вас есть предложения для меня? Так что вы знаете, я все еще работаю над этим, и когда я нахожу решение, которое подходит мне, я дам вам кредит на это. – peer

+0

Я не думаю, что ваш путь - лучшее решение. Я бы предложил использовать мой – MyKuLLSKI

Смежные вопросы