WPF привязка данных - PullRequest
       20

WPF привязка данных

11 голосов
/ 11 августа 2008

Может ли кто-нибудь указать мне хороший ресурс (или дать подсказку), чтобы показать мне, как выполнять привязку данных к элементам управления (ComboBox, ListBox и т. Д.) В WPF? Я немного растерялся, когда у меня отобрали все мои прелести в WinForms, и я не настолько рад, чтобы начать с ...

Ответы [ 6 ]

5 голосов
/ 11 августа 2008

Лучший ресурс, который я нашел для привязки данных WPF, - это блог Беа Коста . Начните с первого поста и читайте дальше. Это потрясающе.

3 голосов
/ 11 августа 2008

И еще несколько ссылок, на случай, если вышеприведенного недостаточно:

Windows Presentation Foundation - Темы для привязки данных
- Приблизительно 30 статей «Как сделать» из MSDN.
«В темах этого раздела описывается, как использовать привязку данных для привязки элементов к данным из различных источников данных в форме объектов общеязыковой среды выполнения (CLR) и XML».

Переход к привязке данных WPF по одному шагу за раз
- от гуру WPF Джош Смит
«В этой статье объясняются абсолютные основы привязки данных WPF. В ней показано четыре различных способа выполнения одной и той же простой задачи. Каждая итерация приближается к самой компактной возможной реализации только для XAML. Эта статья предназначена для людей, не имеющих опыта работы с WPF. привязка данных. "

3 голосов
/ 11 августа 2008

Я нахожу обучающие видео в Windows Client .Net одинаково потрясающими. Dot Net Rocks TV также освещал это некоторое время назад.

3 голосов
/ 11 августа 2008

в коде позади - установите DataContext вашего списка равным коллекции, к которой вы привязываетесь.

private void OnInit(object sender, EventArgs e)
{
  //myDataSet is some IEnumerable 

  // myListBox is a ListBox control.
  // Set the DataContext of the ListBox to myDataSet
  myListBox.DataContext = myDataSet;
}

В XAML Listbox может объявить, к каким свойствам он привязывается, используя синтаксис «Привязка».

<ListBox Name="myListBox" Height="200"
  ItemsSource="{Binding Path=BookTable}"
  ItemTemplate  ="{StaticResource BookItemTemplate}"/>
2 голосов
/ 29 декабря 2008

Вам нужно сделать три вещи:

  1. Свяжите ItemsSource ComboBox со списком опций.
  2. Свяжите SelectedItem со свойством, которое содержит выбор.
  3. Установите для ComboBox.ItemTemplate значение DataTemplate для ComboBoxItem.

Так, например, если вашим объектом контекста данных является человек, имеющий адреса электронной почты, и вы хотите выбрать его основной, у вас могут быть классы с этими сигнатурами:

public class EmailAddress
{
    public string AddressAsString { get; set; }
}

public class Person
{
    public IEnumerable<EmailAddress> EmailAddresses { get; }
    public EmailAddress MainEmailAddress { get; set; }
}

Тогда вы можете создать поле со списком следующим образом:

<ComboBox ItemsSource="{Binding EmailAddresses}" SelectedItem="{Binding MainEmailAddress}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <ComboBoxItem Content="{Binding AddressAsString}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

Теперь вам нужно реализовать INotifyPropertyChanged в Person и EmailAddress. Для коллекции EmailAddresses вы можете поддержать ее с помощью ObjservableCollection.

Или в качестве альтернативы вы можете использовать Update Controls .NET . Это проект с открытым исходным кодом, который заменяет привязку данных и не требует INotifyPropertyChanged. Вы можете использовать любую коллекцию, имеющую смысл для поддержки свойства EmailAddresses. XAML работает так же, как и выше, за исключением того, что вы импортируете пространство имен UpdateControls.XAML и замените {Binding ...} на {u: Update ...}.

2 голосов
/ 11 августа 2008

Вот еще один хороший ресурс из MSDN: Обзор привязки данных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...