2015-12-14 3 views
3

У меня ошибка во время разработки в моем XAML:WPF конвертер ссылка метания объект не установлен во время разработки

объект не указывает на экземпляр объекта.

Это происходит только во время разработки и отлично работает во время выполнения. Ошибка исходит от моего конвертера, код которого у меня ниже. Я думал, что это может быть из-за того, что я не проверял, было ли значение равно null, или я возвращал null, если он был null, но я изменил оба значения, и это не имело никакого значения.

И идеи приветствуются. Благодаря

public class CouponDataSplitterConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter,  CultureInfo culture) 
    { 
     if (value != null) 
     { 
      List<SelectionArea> selectionAreasList = 
       new List<SelectionArea>((ObservableCollection<SelectionArea>) value); 
      foreach (var area in selectionAreasList) 
      { 
       if (area.AreaName.Contains(parameter.ToString())) 
       { 
        return area.SelectionRows; 
       } 
      } 

      return selectionAreasList; 
     } 
     return ""; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

XAML:

ItemsSource="{Binding Coupon.SelectionAreas, 
     ConverterParameter='Test Parameter', 
     Converter={StaticResource CouponDataSplitterConverter} 

Трассировка стека:

at App.UI.Converters.CouponDataSplitterConverter.Convert(Object  value, Type targetType, Object parameter, CultureInfo culture) 
at System.Windows.Data.BindingExpression.TransferValue(Object newValue, Boolean isASubPropertyChange) 
at System.Windows.Data.BindingExpression.Activate(Object item) 
at System.Windows.Data.BindingExpression.AttachToContext(AttachAttempt attempt) 
at System.Windows.Data.BindingExpression.AttachOverride(DependencyObject target, DependencyProperty dp) 
at System.Windows.Data.BindingExpressionBase.OnAttach(DependencyObject d, DependencyProperty dp) 
at System.Windows.StyleHelper.GetInstanceValue(UncommonField`1 dataField, DependencyObject container, FrameworkElement feChild, FrameworkContentElement fceChild, Int32 childIndex, DependencyProperty dp, Int32 i, EffectiveValueEntry& entry) 
at System.Windows.StyleHelper.GetChildValueHelper(UncommonField`1 dataField, ItemStructList`1& valueLookupList, DependencyProperty dp, DependencyObject container, FrameworkObject child, Int32 childIndex, Boolean styleLookup, EffectiveValueEntry& entry, ValueLookupType& sourceType, FrameworkElementFactory templateRoot) 
at System.Windows.StyleHelper.GetChildValue(UncommonField`1 dataField, DependencyObject container, Int32 childIndex, FrameworkObject child, DependencyProperty dp, FrugalStructList`1& childRecordFromChildIndex, EffectiveValueEntry& entry, ValueLookupType& sourceType, FrameworkElementFactory templateRoot) 
at System.Windows.StyleHelper.GetValueFromTemplatedParent(DependencyObject container, Int32 childIndex, FrameworkObject child, DependencyProperty dp, FrugalStructList`1& childRecordFromChildIndex, FrameworkElementFactory templateRoot, EffectiveValueEntry& entry) 
at System.Windows.StyleHelper.ApplyTemplatedParentValue(DependencyObject container, FrameworkObject child, Int32 childIndex, FrugalStructList`1& childRecordFromChildIndex, DependencyProperty dp, FrameworkElementFactory templateRoot) 
at System.Windows.StyleHelper.InvalidatePropertiesOnTemplateNode(DependencyObject container, FrameworkObject child, Int32 childIndex, FrugalStructList`1& childRecordFromChildIndex, Boolean isDetach, FrameworkElementFactory templateRoot) 
at System.Windows.FrameworkTemplate.InvalidatePropertiesOnTemplate(DependencyObject container, Object currentObject) 
at System.Windows.FrameworkTemplate.HandleBeforeProperties(Object createdObject, DependencyObject& rootObject, DependencyObject container, FrameworkElement feContainer, INameScope nameScope) 
at System.Windows.FrameworkTemplate.<>c__DisplayClass0.<LoadOptimizedTemplateContent>b__5(Object sender, XamlObjectEventArgs args) 
at System.Xaml.XamlObjectWriter.OnBeforeProperties(Object value) 
at System.Xaml.XamlObjectWriter.Logic_CreateAndAssignToParentStart(ObjectWriterContext ctx) 
at System.Xaml.XamlObjectWriter.WriteStartMember(XamlMember property) 
at System.Xaml.XamlWriter.WriteNode(XamlReader reader) 
at System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlReader templateReader, XamlObjectWriter currentWriter) 
at System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlObjectWriter objectWriter) 
at System.Windows.FrameworkTemplate.LoadOptimizedTemplateContent(DependencyObject container, IComponentConnector componentConnector, IStyleConnector styleConnector, List`1 affectedChildren, UncommonField`1 templatedNonFeChildrenField) 
at System.Windows.FrameworkTemplate.LoadContent(DependencyObject container, List`1 affectedChildren) 
at System.Windows.StyleHelper.ApplyTemplateContent(UncommonField`1 dataField, DependencyObject container, FrameworkElementFactory templateRoot, Int32 lastChildIndex, HybridDictionary childIndexFromChildID, FrameworkTemplate frameworkTemplate) 
at System.Windows.FrameworkTemplate.ApplyTemplateContent(UncommonField`1 templateDataField, FrameworkElement container) 
at System.Windows.FrameworkElement.ApplyTemplate() 
at System.Windows.FrameworkElement.MeasureCore(Size availableSize) 
at System.Windows.UIElement.Measure(Size availableSize) 
at System.Windows.ContextLayoutManager.UpdateLayout() 
at System.Windows.UIElement.UpdateLayout() 
+0

У вас есть трассировка стека, которая указывает на что-нибудь полезное? –

+2

(Также непонятно, почему вы создаете новый 'List ' вместо того, чтобы просто перебирать существующую коллекцию ...) –

+0

Я добавил трассировку стека. Это тоже хороший момент, я не уверен, почему я решил использовать список, но, конечно же, это не повлияет? – Spitfire5793

ответ

1

Если вы получаете NullReferenceException то что-то пустое.

Ваш код проверяет явно, что аргумент value равен нулю. Тем не менее, у вас есть эта строка кода в foreach:

if (area.AreaName.Contains(parameter.ToString())) 

Эта линия может бросить NullReferenceException если либо AreaName свойство имеет нулевое значение (вызов Contains метод будет бросать), или parameter аргумент поставляется к методу было null (вызов метода ToString).

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

+0

. Сделал это, проверяя, было ли имя области и параметр пустым, и он снова заработал. Кажется, так просто, но я не мог этого видеть. Большое спасибо! – Spitfire5793

1

Это не легко сказать, что в настоящее время устанавливается в нулевое значение, значение может быть изначально пустое значение, если она не была инициализирована в конструкторе viewmodel (MarkSenseCoupon в этом случае я предполагаю). Посмотрите на Debugging Your Custom Control at Design Time на шаги по отладке вашего элемента управления во время разработки и просто поместите точку останова в начале метода преобразования, чтобы выяснить, какой объект установлен в значение null.

Этот SO вопрос также, кажется, иметь дело с подобным вопросом WPF Converter casting causes Visual Studio designer exception ...

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