Привязать список<MyObject> к DataGrid? При попытке получить "TargetInvocationException"

Я пытаюсь связать List<MyObject> к DataGrid в WPF вместо использования массива MyObject[], Всякий раз, когда я пытаюсь сделать это, я получаю необработанное TargetInvocationException,

Мой объект:

public class Website
{
    public string WebsiteName { get; set; }
    public string WebsiteAddress { get; set; }
    private LoginCredentials Credentials { get; set; }

    public bool UniquePassword { get; set; } //If uses uses a unique password on this site
    public bool LoginToSite { get; set; }
    public bool UsesUsernameAndDomain { get; set; }

    public string GetUsername()
    {
        if(UsesUsernameAndDomain)
        {
            return Credentials.Username + "@" + Credentials.EmailDomain;
        }
        else
        {
            return Credentials.Username;
        }
    }

    public void SetUsername(string value)
    {
        Credentials.Username = value;
    }

    public void SetDomain(string value)
    {
        Credentials.EmailDomain = value;
    }
}

Фрагмент ViewModel:

    private List<Website> m_Websites;
    public List<Website> Websites
    {
        get { return m_Websites; }
        set { m_Websites = value; RaisePropertyChanged("Websites"); }
    }

XAML:

        <DataGrid ItemsSource="{Binding}"
                  DataContext="{Binding Websites}"
                  AutoGenerateColumns="False"
                  FontSize="14"
                  VerticalAlignment="Center"
                  VerticalContentAlignment="Center">

Когда я пытаюсь сделать это с массивом, он работает как положено. Я хочу использовать коллекцию для дополнительного поведения, которое входит в комплект. Что я здесь не так делаю?

Примечание: я очень новичок в WPF и только недавно озадачился, хотя связывание данных не предполагает, что я знаю все тонкости WPF или его парадигм.

1 ответ

Решение

Я сделал довольно новичок ошибку. При связывании со свойством List я не создавал частное поле типа List.

Я пытался связать с:

    private List<Website> m_Websites;
    public List<Website> Websites
    {
        get { return m_Websites; }
        set { m_Websites = value; RaisePropertyChanged("Websites"); }
    }

Мне нужно было создать новый список:

    private List<Website> m_Websites = new List<Websites>();
Другие вопросы по тегам