Как сравнить страницу xaml с e.OriginalSource?

У меня есть метод, который выглядит ниже:

private void someEvent(RoutedEventArgs e)
{
    if(e.OriginalSource == typeof(a.b.c.somePages))
}

Этот метод будет в моей viewModel. С точки останова, я вижу, есть этот e.OriginalSource, который имеет мою страницу xaml somePages как ценность. Поэтому я пытаюсь сравнить значение. Но это дает мне предупреждение, как показано ниже:

Possible unintended reference comparison; to get a value comparison, 
cast the left hand side to type 'System.Type'

Поэтому я обновил свой код до if((System.Type)e.OriginalSource == typeof(a.b.c.somePages)) но предупреждение все еще там. Могу ли я знать, что не так?

3 ответа

Решение

В этой ситуации вам нужно набрать cast. Вы не можете получить тип объекта без приведения, потому что для e.OriginalSource тип будет Object, Кроме того, в строительстве typeof должен быть объектом System.Type тип:

Используется для получения System.Type объект для типа.

Поэтому попробуйте это:

Page page = e.OriginalSource as Page;

if (page != null) 
{
    string test = page.ToString();
}

Или просто использовать ToString() метод для e.OriginalSource как вы упомянули.

Я не уверен, что это правильный путь, но я могу сравнить, используя следующий способ:

if(e.OriginalSource.ToString() == "a.b.c.SomePages")

Вы сравнивали объект с type, Если вы вместо этого намеревались сравнить тип объекта, попробуйте сделать это следующим образом:

if (e.OriginalSource.GetType() == typeof(a.b.c.somePages))
{

}

Другой способ использования это оператор:

if(e.OriginalSource is a.b.c.SomePages)
{

}

Из ссылки MSDN выше, о is:

Msgstr "Проверяет, совместим ли объект с данным типом".

Другие вопросы по тегам