#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.