хорошо, вы можете увидеть в примере кода, который вы адаптировали, что они «используют ключевую эстетику / аргумент, чтобы помочь однозначно идентифицировать выбранные наблюдения». Почему бы вам не использовать его для идентификации фасета?
Вам нужно всего лишь изменить одну строку в вашем коде, изменив key = gear
в пределах aes()
.
То событие просто подписывается на и отказывается от подписки от другого события. Если Вы захотите, чтобы Ваши подписчики (и только Ваши подписчики - не отдельные к другому событию) были вызваны, то необходимо будет держаться подписчиков отдельно. Например, Вы могли изменить код на что-то как:
private EventHandler canExecuteChanged;
public event EventHandler CanExecuteChanged
{
add
{
CommandManager.RequerySuggested += value;
canExecuteChanged += value;
}
remove
{
CommandManager.RequerySuggested -= value;
canExecuteChanged -= value;
}
}
Хорошо, я нашел, что, если я хочу инициировать то событие, необходимо сделать:
CommandManager.InvalidateRequerySuggested();.
Я думаю, что Вам перепутали события с делегатами. Только класс, выставляющий событие, может повысить его... Другие могут только подписаться - отказываются от подписки к нему. При вызове события из класса, объявляя событие это должно работать как постоянный делегат.
Лучшая страница я мог найти на Событиях по сравнению с Делегатами. Читайте..
Можно ли отправить больший отрывок.. что-то кажется неправильно..
Я думаю, что наконец вижу Вашу проблему и как решить ее. Короткий Ответ: Это не знает, что имя делегата вызывает, если Вы пишете свои собственные средства доступа. Если Вы не делаете.. компилятор добавляет частного делегата известного имени и следовательно может вызвать его
Этот фрагмент кода показывает то, что я имею в виду. Эта статья 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!");
}
}
Необходимо вызвать базовые события непосредственно. В Вашем случае выглядит, как будто это было бы:
<blockquote>CommandManager.RequerySuggested(sender, EventArgs.…)</blockquote>
/ РЕДАКТИРОВАНИЕ: хорошо, я не заметил это CommandManager
класс платформы. В этом случае Вы, очевидно, не хотите делать то, что я предложил. Решение Jon к точке: необходимо отслеживать собственное событие и вызвать это (например, как делегат). В соответствии с примером Jon, вызов был бы похож на это:
canExecuteChanged(sender, EventArgs.Empty);