Во время проектирования данные не отображаются - PullRequest
2 голосов
/ 11 января 2012

Я занимаюсь разработкой приложения в silverlight для WP7.Я решил использовать шаблон MVVM.Я поместил класс ViewModelLocator, который находит ViewModels.Еще в примере:

public sealed class ViewModelLocator
{

    private static ViewModelLocator _instance = null;        
    public static ViewModelLocator Instance
    {
        get 
        {
            return _instance;
        }
        set
        {
            _instance = value;                                        
        }
    }

    public SomeViewModel SomeVM
    {
        get
        {
              ........
        }
    }
........
}

DataContext настраивается путем привязки к Instance.SomeVM, локатор является экземпляром ViewModelLocator.

DataContext="{Binding Instance.SomeVM, Source={StaticResource Locator}}"

У меня проблема с проекцией данных во время просмотравремя разработки, когда я связываю DataContext с Instance.LocationDetail.

Когда я внес незначительные изменения, а затем установил DataContext только для SomeVM .. данные отображаются.

Почему данные не отображаются ввремя разработки, когда я использую Binging to Instance.SomeVM?

Во время выполнения все работает нормально.В обоих случаях.

1 Ответ

1 голос
/ 12 января 2012

Когда вы инициализируете свойство Instance?

Я предполагаю, что вы добавили экземпляр ViewModelLocator в ресурсы вашего приложения с ключом 'Locator', но даже в этом случае кажется, что свойство Instance останется нулевым, поскольку оно никогда не назначается.

Если вы делаете:

DataContext="{Binding Instance.SomeVM, Source={StaticResource Locator}}"

Вы пытаетесь получить значение SomeVM из свойства Instance.Но Instance, вероятно, имеет значение null ...

Это должно работать:

DataContext="{Binding SomeVM, Source={StaticResource Locator}}"

И если вы хотите одноэлементный шаблон, вам следует рассмотреть возможность инициализации вашего свойства Instance:

private static ViewModelLocator _instance = null;        
public static ViewModelLocator Instance
{
    get 
    {
        if(_instance == null)
            _instance = new ViewModelLocator();
        return _instance;
    }
    set
    {
        _instance = value;                                        
    }
}
...