Как отобразить данные коллекции в панели проектирования VS WPF?

#c# #wpf #visual-studio-2010 #data-binding

#c# #wpf #visual-studio-2010 #привязка к данным

Вопрос:

Как мне заставить VS заполнить мои ListView данные образцами на панели дизайна?

Я в тупике. Я немного почитал и погуглил, но не могу найти четкого ответа. Отображение поддельных данных в панели разработки VS значительно ускорило бы тематизацию, поскольку мне не пришлось бы отлаживать ее каждые несколько изменений.

Вот мой код:

XAML:

 <ListView DataContext="{Binding}"
          Name="PeopleListView">
    <ListView.ItemTemplate>
        <DataTemplate DataType="Person">
                <WrapPanel>
                    <TextBlock Text="{Binding Path=FirstNameView}"/>
                    <TextBlock Text="{Binding Path=LastNameView}" />
                </WrapPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
  

Коллекция:

 public class People : ObservableCollection<Person>
{
    public People()
    {
        this.Add(new Person() { FirstName = "John", LastName = "Doe" });
        this.Add(new Person() { FirstName = "John", LastName = "Doe" });
        this.Add(new Person() { FirstName = "John", LastName = "Doe" });
    }
}
  

Главная:

 private People PList;

public MainWindow()
{
    this.PList = new People();
    PeopleListView.ItemsSource = this.PList;
}
  

РЕДАКТИРОВАНИЕ И ПРОГРЕСС:

Я прочитал учебные пособия, найденные по ссылке, предоставленной Мэттом Уэстом. Они были очень полезны. Я почти разобрался с этим.

Я столкнулся с проблемой, когда дизайнер пытается отобразить образцы данных. Я получаю эту ошибку в моих свойствах примера: Writable property or collection expected . Я понимаю ошибку, я просто не знаю, как это исправить, не предоставляя каждому свойству set инструкцию.

Вот мой код:

Класс Person:

 public class Person : INotifyPropertyChanged
{
    private string _FirstName;
    private string _LastName;

    public string FirstName
    {
        get { return this._email; }
        set
        {
            this._FirstName = value;
            OnPropertyChanged("FirstName");
            OnPropertyChanged("FirstNameView");
        }
    }
    public string LastName
    {
        get { return this._password; }
        set
        {
            this._LastName = value;
            OnPropertyChanged("LastName");
            OnPropertyChanged("FirstNameView");
        }
    }
    public string FirstNameView
    {
        get { return this.FirstName; }
    }
    public string LastNameView
    {
        get { return this.LastName; }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string propertyName) { /*...*/ }
}
  

PeopleViewSampleData.xaml:

 <sample:People xmlns:sample="clr-namespace:MyProgram">
    <sample:Person FirstNameView="John" LastNameView="Doe" />
</sample:People>  
  

РЕДАКТИРОВАТЬ, РЕШЕНИЕ:
Следующие ItemSource , DataContext и :DataContext настройки заставили это работать. Если бы что-то из этого отсутствовало, ничего бы не отображалось.

 <ListView ItemsSource="{Binding}"
          DataContext="{Binding}"
          d:DataContext="{d:DesignData Source=/SampleData/PeopleListViewSampleData.xaml}"/>
  

Ответ №1:

Я не думаю, что вам нужно устанавливать DataContext в представлении списка пользователей и указывать ItemsSource. Избавьтесь от DataContext={Привязки}. Не уверен, решит ли это вашу проблему проектирования или нет. В целом, обычно для этого рекомендуется использовать свойства d: DesignData и d: DesignInstance. Вот руководство: http://karlshifflett.wordpress.com/2009/10/28/ddesigninstance-ddesigndata-in-visual-studio-2010-beta2/

Комментарии:

1. Как мне решить эту проблему? Я получаю эти ошибки The property 'DataContext' was not found in type 'ListView'. , Cannot resolve symbol 'd' Cannot resolve symbol 'DataContext' … с помощью этого кода: <ListView d:DataContext="....."

2. @PiZzL3: Вам следует прочитать другую статью, на которую дана ссылка выше: karlshifflett.wordpress.com/2009/10/21/… Это объясняет, как добавить d: пространство имен

3. Спасибо за вторую ссылку, к сожалению, это не работает. Данные в ListView не будут отображаться, пока я не отлажу..

4. Я нашел более актуальную ссылку в комментариях к статье: blogs.msdn.com/b/wpfsldesigner/archive/2010/06/30 / … . Я попробую это как можно скорее.

5. Статья msdn очень помогла. У меня почти получилось. Единственная проблема в моем SampleData.xaml файле, <sample:Person FirstName="John" выдает мне Writable property or collection expected . Это приводит к тому, FirstName что они не отображаются в конструкторе. Я не могу изменить его на свойство, доступное для записи, потому что я отображаю его только с помощью get правил форматирования with.