Как отобразить данные коллекции в панели VS VSF Design? - PullRequest
6 голосов
/ 07 мая 2011

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

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

Вот мой код:

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;
}

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

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

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

Вот мой код:

Персона Класс:

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 Ответ

0 голосов
/ 07 мая 2011

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

...