Запустите событие, которое имеет средства доступа

хорошо, вы можете увидеть в примере кода, который вы адаптировали, что они «используют ключевую эстетику / аргумент, чтобы помочь однозначно идентифицировать выбранные наблюдения». Почему бы вам не использовать его для идентификации фасета?

Вам нужно всего лишь изменить одну строку в вашем коде, изменив key = gear в пределах aes().

5
задан sirrocco 16 October 2008 в 11:35
поделиться

4 ответа

То событие просто подписывается на и отказывается от подписки от другого события. Если Вы захотите, чтобы Ваши подписчики (и только Ваши подписчики - не отдельные к другому событию) были вызваны, то необходимо будет держаться подписчиков отдельно. Например, Вы могли изменить код на что-то как:

private EventHandler canExecuteChanged;

public event EventHandler CanExecuteChanged
{
    add
    {
        CommandManager.RequerySuggested += value;
        canExecuteChanged += value;
    }
    remove
    {
        CommandManager.RequerySuggested -= value;
        canExecuteChanged -= value;
    }
}
3
ответ дан 14 December 2019 в 04:51
поделиться

Хорошо, я нашел, что, если я хочу инициировать то событие, необходимо сделать:

CommandManager.InvalidateRequerySuggested();.
1
ответ дан 14 December 2019 в 04:51
поделиться

Я думаю, что Вам перепутали события с делегатами. Только класс, выставляющий событие, может повысить его... Другие могут только подписаться - отказываются от подписки к нему. При вызове события из класса, объявляя событие это должно работать как постоянный делегат.

Лучшая страница я мог найти на Событиях по сравнению с Делегатами. Читайте..

Можно ли отправить больший отрывок.. что-то кажется неправильно..

Уничтожающее обновление

Я думаю, что наконец вижу Вашу проблему и как решить ее. Короткий Ответ: Это не знает, что имя делегата вызывает, если Вы пишете свои собственные средства доступа. Если Вы не делаете.. компилятор добавляет частного делегата известного имени и следовательно может вызвать его

Этот фрагмент кода показывает то, что я имею в виду. Эта статья MSDN показала мне свет. Великий чувак вопроса.. Я потерял 30 минут Upvoted :)

public class Hash1 
    {

        private EventHandler myHomeMadeDelegate;
        public event EventHandler FancyEvent
        {
            add
            {
                //myDelegate += value;
                myHomeMadeDelegate = (EventHandler)Delegate.Combine(myHomeMadeDelegate, value);
            }
            remove
            {
                //myDelegate -= value;
                myHomeMadeDelegate = (EventHandler)Delegate.Remove(myHomeMadeDelegate, value);
            }
        }
        public event EventHandler PlainEvent;


        public Hash1()
        {
            FancyEvent += new EventHandler(On_Hash1_FancyEvent);
            PlainEvent += new EventHandler(On_Hash1_PlainEvent);

            // FancyEvent(this, EventArgs.Empty);  //won't work:What is the backing delegate called? I don't know
            myHomeMadeDelegate(this, EventArgs.Empty); // Aha!
            PlainEvent(this, EventArgs.Empty);
        }

        void On_Hash1_PlainEvent(object sender, EventArgs e)
        {
            Console.WriteLine("Bang Bang!");
        }

        void On_Hash1_FancyEvent(object sender, EventArgs e)
        {
            Console.WriteLine("Bang!");
        }
}
4
ответ дан 14 December 2019 в 04:51
поделиться

Необходимо вызвать базовые события непосредственно. В Вашем случае выглядит, как будто это было бы:

<blockquote>CommandManager.RequerySuggested(sender, EventArgs.…)</blockquote>

/ РЕДАКТИРОВАНИЕ: хорошо, я не заметил это CommandManager класс платформы. В этом случае Вы, очевидно, не хотите делать то, что я предложил. Решение Jon к точке: необходимо отслеживать собственное событие и вызвать это (например, как делегат). В соответствии с примером Jon, вызов был бы похож на это:

canExecuteChanged(sender, EventArgs.Empty);
0
ответ дан 14 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: