Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

в коде позади - установите 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 может объявлять, к каким свойствам он привязывается, используя синтаксис «Binding».

<ListBox Name="myListBox" Height="200"
  ItemsSource="{Binding Path=BookTable}"
  ItemTemplate  ="{StaticResource BookItemTemplate}"/>

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

Windows Presentation Foundation — практические разделы по привязке данных
- Около 30 статей с практическими рекомендациями из MSDN.
«В темах этого раздела описывается, как использовать привязку данных для привязки элементов к данным из различных источников данных в форме объектов CLR и XML."

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

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

Есть три вещи, которые вам нужно сделать:

  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.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top