Коллекция интерфейса XAML / аннотация "Не удалось создать экземпляр" - PullRequest
3 голосов
/ 23 августа 2011

У меня в ViewModel и ObservableCollection<INode>, где INode - интерфейс.

Просмотр XAML похож на:

<Windows x:Class="XXX.Window1"
         xmlns:vw="clr-namespace:XXX.Views" 
         xmlns:vm="clr-namespace:XXX.ViewModels" 
         xmlns:n="clr-namespace:XXX.Models.Nodes"
         ... />
    ...
    <vm:MyView>
        <vw:MyView.DataContext>
            <vm:MyViewModel>
                <vm:ComponentViewModel.Nodes>
                    <n:MyNode />                <--- PROBLEM HERE
                    <n:MyNode />
                </vm:ComponentViewModel.Nodes>
            </vm:MyViewModel>
        </vw:MyView.DataContext>
    </vm:MyView>
    ...

Теперь это работает во время выполнения, но не во временном окне design , которое показывает: Не удалось создать экземпляр типа 'MyNode'

Есть идеи, как это решить?


interface INode
{
    string Name { get; set; }

    string Status { get; }
}

abstract class Node : INode
{
    public string Name { get; set; }

    public abstract string Status { get; }

    public override int GetHashCode()
    {
        unchecked
        {
            return Name.GetHashCode();     // <--- PROBLEM WAS HERE, Name = null
        }
    }
}

class MyNode : Node
{
    public override NodeStatus Status { get { return "test"; } }
}

Ответы [ 2 ]

0 голосов
/ 26 августа 2011

Насколько я вижу, это не проблема XAML, а потому, что вы не устанавливаете свойство Name. Когда вызывается GetHashCode, он завершится неудачно, потому что вы вызываете метод по нулевой ссылке.

Попробуйте добавить свой узел как

<n:MyNode Name="blah" />
0 голосов
/ 26 августа 2011

Каждый случай кажется уникальным. Вот что я узнал после ее решения: не только исключение в конструкторе может генерировать это сообщение об ошибке. Если некоторые системные методы, такие как GetHashCode() throw и exception, оно будет отображать это же сообщение (иногда во время разработки only ).

У других людей может быть больше советов или больше понимания VS времени разработки.

...