Данные о времени проектирования с использованием света MVVM - PullRequest
1 голос
/ 12 октября 2011

Я использую Visual Studio для создания приложения для ноутбука WP7 с помощью легкого инструментария MVVM.Я хотел бы получить данные времени разработки, но они не отображаются.Он работает во время выполнения, реализация точно такая же (DesignNoteDataService = NoteDataService) в данный момент (у меня пока нет реального источника данных).

Что я делаю не так?

DesignNoteDataService (& NoteDataService)

public class DesignNoteDataService : INoteDataService
{
    private List<Note> _noteList;

    private void InitNotes()
    {
        _noteList = new List<Note>();
        _noteList.Add(new Note(0, "Zahnarzt", "Zahnarzt morgen", Color.FromArgb(50, 20, 150, 50)));
        _noteList.Add(new Note(0, "Party", "Sarah 7 Jahre", Color.FromArgb(50, 200, 10, 50)));
        _noteList.Add(new Note(0, "Arbeit", "Projekt abgabe", Color.FromArgb(50, 20, 150, 50)));
        _noteList.Add(new Note(0, "Meeting", "Abend Hotel @ Olten", Color.FromArgb(50, 20, 150, 50)));
    }

    void INoteDataService.GetNoteList(Action<List<Note>, Exception> callback)
    {
        if (_noteList == null)
            InitNotes();
        callback(_noteList, null);
    }

    void INoteDataService.GetNoteById(Action<Note, Exception> callback, int id)
    {
        if (_noteList == null)
        {
            InitNotes();
        }
        var item = (from n in _noteList
                    where n.Id.Equals(id)
                    select n).First();
        callback(item, null);
    }
}

MainViewModel

public class MainViewModel : ViewModelBase
{
    private readonly INoteDataService _dataService;

    /// <summary>
    /// The <see cref="WelcomeTitle" /> property's name.
    /// </summary>
    public const string NoteListPropertyName = "NoteList";

    private ObservableCollection<Note> _noteList;

    /// <summary>
    /// Gets the WelcomeTitle property.
    /// Changes to that property's value raise the PropertyChanged event. 
    /// </summary>
    public ObservableCollection<Note> NoteList
    {
        get
        {
            return _noteList;
        }

        set
        {
            if (_noteList == value)
            {
                return;
            }

            _noteList = value;
            RaisePropertyChanged(NoteListPropertyName);
        }
    }

    /// <summary>
    /// Initializes a new instance of the MainViewModel class.
    /// </summary>
    public MainViewModel(INoteDataService dataService)
    {
        _dataService = dataService;
        NoteList = new ObservableCollection<Note>();
        _dataService.GetNoteList(
            (item, error) =>
            {
                if (error != null)
                {
                    return;
                }
                foreach (var note in item)
                {
                    NoteList.Add(note);
                }
            });
    }

Связывание в MainPage.xaml

 <ListBox ItemsSource="{Binding NoteList}"/>

Часть ViewModelLocator

        if (ViewModelBase.IsInDesignModeStatic)
        {
            SimpleIoc.Default.Register<INoteDataService, Design.DesignNoteDataService>();
        }
        else
        {
            SimpleIoc.Default.Register<INoteDataService, NoteDataService>();
        }

1 Ответ

2 голосов
/ 12 октября 2011

Вам, скорее всего, нужно установить DataContext в вашем представлении. Обычно вы делаете это с помощью локатора вида (см. Веб-сайт MVVM Light или здесь для примера).

В качестве альтернативы вы можете установить DataContext в конструкторе вашего представления, хотя вы теряете "Blendability".

О, да, вам, очевидно, нужно установить (ввести) правильную службу данных.

...