Ответ 1
Событие, вероятно, возникает до того, как элементы полностью загружены или ссылки все еще не установлены, следовательно, исключения. Попробуйте установить только свойства, если ссылка не null
и IsLoaded
равна true
.
Хорошо, у меня немного странная ошибка...
Это отлично работает:
private void radioButtonNormalPoint_Checked(object sender, RoutedEventArgs e)
{
//comboBoxNormalPoint.SelectedIndex = 0;
//ellipsePoint.Fill = System.Windows.Media.Brushes.Black;
}
Это бросает System.Reflection.TargetInvocationException
:
private void radioButtonNormalPoint_Checked(object sender, RoutedEventArgs e)
{
comboBoxNormalPoint.SelectedIndex = 0;
ellipsePoint.Fill = System.Windows.Media.Brushes.Black;
}
Кроме того, он не позволяет мне отлаживать его; он сбой при загрузке программы. Если я поставил точку останова в любом месте, он не ударил ее; это просто ошибки сразу.
Событие, вероятно, возникает до того, как элементы полностью загружены или ссылки все еще не установлены, следовательно, исключения. Попробуйте установить только свойства, если ссылка не null
и IsLoaded
равна true
.
Чтобы диагностировать эту проблему, поместите строку кода, вызывающую исключение TargetInvocationException внутри блока try.
Чтобы устранить эту ошибку, получите внутреннее исключение. Это может быть связано с рядом различных проблем.
try
{
// code causing TargetInvocationException
}
catch (Exception e)
{
if (e.InnerException != null)
{
string err = e.InnerException.Message;
}
}
Я думаю, что у вас будет меньше проблем, если вы объявите свойство, которое реализует INotifyPropertyChanged, затем databind IsChecked
, SelectedIndex
(используя IValueConverter) и Fill
(используя IValueConverter) к нему вместо использования Проверенного события для переключения SelectedIndex
и Fill
.
Если событие с проверкой радиообъекта происходит до того, как содержимое окна будет загружено полностью, то есть эллипс будет загружен полностью, такое исключение будет выбрано. Поэтому проверьте, загружен ли пользовательский интерфейс окна (возможно, с помощью события Window_ContentRendered и т.д.).
Это часто вызвано попыткой обработки нулевого объекта. Например, попытка очистить список Bindable, который является null, вызовет исключение:
public class MyViewModel {
[BindableProperty]
public virtual IList<Products> ProductsList{ get; set; }
public MyViewModel ()
{
ProductsList.Clear(); // here is the problem
}
}
Это можно легко устранить, установив нуль:
if (ProductsList!= null) ProductsList.Clear();